首页 > 解决方案 > 过滤每天的时间序列数据框

问题描述

我有一个很大的时间序列dataframepandas),有一个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' 是不同的大小;即它们的索引不匹配),但我不知道如何解决它。

有没有人有任何想法?

谢谢。

标签: pythonpandas

解决方案


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时间序列;您可以根据上面的最后一行使用它来选择整行。


推荐阅读