首页 > 解决方案 > 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

我目前使用的方法非常繁琐,他们有没有更好的方法来获得预期的结果。

标签: pythonpandasdataframe

解决方案


使用列表理解:

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系列betweenpd.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

推荐阅读