首页 > 解决方案 > 结合 groupby 和 resample

问题描述

我想计算每周的总和

df = pd.DataFrame({'id':['x1', 'x1', 'x1', 'x1', 'x2', 'x2', 'x2', 'x2']
               ,  'date':['2021-01-01','2021-01-02',
               '2021-01-03','2021-01-04','2021-01-05',
               '2021-01-06','2021-01-07','2021-01-08'],
           'revenue':[5,3,2,
                      10,12,2,
                      1,0]})
df["date"] = pd.to_datetime(df['date'])

预期输出:

  2020-12-28  x1.   10
  2021-01-04    x1.   10
  2021-01-04.   x2.   15

我做了

df.groupby('id', 'date')["revenue"].resample('W-Mon', on='date', closed='left', label='left').sum()

标签: pandaspandas-groupby

解决方案


不是很清楚你正在寻找的输出。
解决方案:

df.groupby('id').resample('W-Mon', on='date').sum().reset_index()

如果我们想通过 id 获得每周(星期一)的收入总和,我们可以使用上面的代码。

输出:

    id  date    revenue
0   x1  2021-01-04  20
1   x2  2021-01-11  15

编辑:

对于预期输出:

    id  date    revenue
0   x1  2020-12-28  10
1   x1  2021-01-04  10
2   x2  2021-01-04  15

解决方案

df = df.groupby('id').resample('W', on='date').sum().reset_index()
df['date'] = df.date - pd.Timedelta('6D')
df

单线解决方案

df.groupby('id').resample('W-Mon', on='date', closed='left', label='left').sum().reset_index()

推荐阅读