为了账号安全,请及时绑定邮箱和手机立即绑定

每天过滤时间序列数据框

每天过滤时间序列数据框

守着星空守着你 2023-04-25 17:36:31
我有一个很大的时间序列dataframe(pandas),有一个datetime索引。我试图dataframe根据每天一列的平均值来过滤它。但是,当我这样做时,出现以下错误:ValueError:只能比较相同标记的 Series 对象这是我到目前为止的代码: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' 大小不同;即它们的索引不匹配),但我不知道如何解决它。有人有什么想法吗?谢谢。
查看完整描述

1 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

一旦您对 DataFrame 进行了重新采样,就很难(但并非不可能)将该结果(您的“ Mean”)与原始数据对齐。


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


查看完整回答
反对 回复 2023-04-25
  • 1 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信