微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据日期时间值缺少日期在数据框中进行计算,而不用空日期填充数据框

如何解决根据日期时间值缺少日期在数据框中进行计算,而不用空日期填充数据框

我有一个与以下数据帧相似的数据帧,并且我想计算最近7天value列的总和。问题是每天不一定有一行。

df = pd.DataFrame({
    'value': [2,3,7,14],'date': ['10/20/2005','10/22/2005','10/25/2005','10/27/2005']
})

df['date'] = pd.to_datetime(df['date'])
df
value   date
    2   2005-10-20
    3   2005-10-22
    7   2005-10-25
    14  2005-10-27

我想要的是类似的东西

 df['value'].sum('Last 7 days')
 26

我发现的问题的解决方案始终是使用.asfreq().reindex()用缺少的日期填充df。不幸的是,这对我来说不是一个选择,因为我有太多的类,每个类都像上一个那样用df表示。因此,使用缺少的日期填充df会创建成千上万的额外行。

有没有一种方法可以使用pd.timedelta()(或类似的方法)将丢失的日期视为零?

解决方法

滚动功能已智能地内置在基于日期时间的列中:

df.rolling('7d',on='date').sum()

请注意,10/27和10/20相隔8天,而不是7:)

如果您想将其放入另一列:

df['sum'] = df.rolling('7d',on='date').sum()['value']

如果您只想要最终值:

df.rolling('7d',on='date').sum()['value'].iloc[-1]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。