python - pandas 得到未来 7 天的总和列
问题描述
我想获得一列接下来 7 天的值的总和
我的数据框:
date value
0 2021-04-29 1
1 2021-05-03 2
2 2021-05-06 1
3 2021-05-15 1
4 2021-05-17 2
5 2021-05-18 1
6 2021-05-21 2
7 2021-05-22 5
8 2021-05-24 4
我试图创建一个新列,其中包含距当前日期 7 天的日期
df['temp'] = df['date'] + timedelta(days=7)
然后计算日期范围之间的值:
df['next_7days'] = df[(df.date > df.date) & (df.date <= df.temp)].value.sum()
但这给了我全 0 的答案。
预期结果:
date value next_7days
0 2021-04-29 1 3
1 2021-05-03 2 1
2 2021-05-06 1 0
3 2021-05-15 1 10
4 2021-05-17 2 12
5 2021-05-18 1 11
6 2021-05-21 2 9
7 2021-05-22 5 4
8 2021-05-24 4 0
我目前使用的方法非常繁琐,他们有没有更好的方法来获得预期的结果。
解决方案
使用列表理解:
tomorrow_dates = df.date + pd.Timedelta("1 day")
next_week_dates = df.date + pd.Timedelta("7 days")
df["next_7days"] = [df.value[df.date.between(tomorrow, next_week)].sum()
for tomorrow, next_week in zip(tomorrow_dates, next_week_dates)]
我们首先定义明天和下周的日期并存储它们。如果日期确实在所需范围之间,则将它们放在一起并使用 来获得布尔zip
系列between
。pd.Series
然后使用布尔索引来获取实际value
的 s 和sum
它们。对每个日期对执行此操作。
要得到
date value next_7days
0 2021-04-29 1 3
1 2021-05-03 2 1
2 2021-05-06 1 0
3 2021-05-15 1 10
4 2021-05-17 2 12
5 2021-05-18 1 11
6 2021-05-21 2 9
7 2021-05-22 5 4
8 2021-05-24 4 0