Python 基于日期时间值(缺少日期)在数据框中进行计算,而不使用空日期填充数据框
我有一个类似于下面的数据框,我想计算过去七天Python 基于日期时间值(缺少日期)在数据框中进行计算,而不使用空日期填充数据框,python,pandas,datetime,missing-data,Python,Pandas,Datetime,Missing Data,我有一个类似于下面的数据框,我想计算过去七天值列的总和。问题是,不一定每天都有争吵 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
值
列的总和。问题是,不一定每天都有争吵
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]
你想按周分组还是按过去七天的滚动窗口分组?太好了!非常感谢你!这正是我一直在寻找的。这节省了这么多时间。很高兴它起作用了。如果它确实解决了你的问题,那么考虑未来用户可以更容易地找到他们需要的东西。是否有一个文档,比如“7D”/'1W’/'1M’,熊猫识别为DATEIMIT单元?有一个表在页面上超过30%-40%。搜索“日期偏移”。值得注意的是,它们并不总是在所有环境下都有效。