python - 过滤每天的时间序列数据框
问题描述
我有一个很大的时间序列dataframe
(pandas),有一个datetime
索引。我正在尝试dataframe
根据每天一列的平均值进行过滤。但是,当我这样做时,我收到以下错误:
ValueError:只能比较标签相同的系列对象
这是我到目前为止的代码:
def filter(Data,Variation):
Mean = Data['column1'].resample('d').mean().dropna()
Min = Mean * (1 - Variation)
Max = Mean * (1 + Variation)
Data = Data[Data['column1'] > Min]
Data = Data[Data['column1'] < Max]
return Data
我想我知道出了什么问题(' Min
' 和 ' Data
' 是不同的大小;即它们的索引不匹配),但我不知道如何解决它。
有没有人有任何想法?
谢谢。
解决方案
Mean
重新采样 DataFrame 后,将结果(您的“ ”)与原始数据对齐会有点困难(但并非不可能) 。
相反,请考虑使用groupby
,如下所示:
# example DataFrame
df = pd.DataFrame(
index=pd.date_range('2020-08-01', freq='3H', periods=20, name='date'),
data=dict(
x=np.random.normal(size=20),
y=np.random.normal(size=20),
))
def f(g, var):
mean = g.mean()
return (mean * (1 - var) < g) & (g < mean * (1 + var))
selx = df.groupby(pd.Grouper(freq='d')).x.apply(f, var=3.0)
df.loc[selx]
注意:selx
只是一个bool
时间序列;您可以根据上面的最后一行使用它来选择整行。
推荐阅读
- python - 如何用两个新维度替换 xarray 对象的当前维度
- python - “FileNotFoundError:[Errno 2] 没有这样的文件或目录:”尽管使用了完整路径
- elasticsearch - 如何对弹性搜索进行嵌套搜索?
- mingw - mingw/lib 与 msys/1.0/lib 之间的区别?
- php - 问:如何在 laravel 的控制器中制作条件构造函数语句
- r - mean(,na.rm = TRUE) 返回 NA 和警告消息
- python - Python 模块可以导入,但它不是来自屏幕窗口
- rust - 在执行异步数据库插入时,如何确保插入的查询数据的寿命足够长?
- arrays - 无法将 undefined 或 null 转换为对象:Next.js || 反应
- reactjs - 反应:useState 值不会在参数值更改时更新