首页 > 解决方案 > 熊猫 groupby 并与当前月份相加

问题描述

这是我正在使用的 df 的前 10 行:


     id        user_id  session_date mb_used

0   1000_13     1000    2018-12-29  89.86
1   1000_204    1000    2018-12-31  0.00
2   1000_379    1000    2018-12-28  660.40
3   1000_413    1000    2018-12-26  270.99
4   1000_442    1000    2018-12-27  880.22
5   1001_0      1001    2018-08-24  284.68
6   1001_3      1001    2018-12-09  656.04
7   1001_4      1001    2018-11-04  16.97
8   1001_10     1001    2018-11-27  135.18
9   1001_15     1001    2018-12-13  761.92

我的问题是:如何找到每个 user_id 每月的 mb_used 总量?这意味着我必须首先隔离每个 user_id,找出他们在同一个月使用了多少行数据,然后将它们相加以获得每个用户的“每月使用的数据”。我可以使用数据透视表来查找使用此代码的每个用户使用的总数据: internet_per_user = pd.pivot_table(internet, index = 'user_id', columns='mb_used',aggfunc='sum') 但我无法合并每月方面。

对于上面发布的 10 行,我希望输出看起来像这样(手动计算):


user_id Month mb_used
1000    12    1901.47
1001    08    284.68
1001    12    1417.96
1001    11    152.15

标签: pythonpandasgroup-bypandas-groupby

解决方案


您将需要对每个月的用户 ID 进行分组并执行总和。您可以使用:

df['session_date'] = pd.to_datetime(df['session_date'], errors='coerce')
(df.groupby(['user_id', df['session_date'].dt.month])['mb_used']
   .sum()
   .reset_index())

   user_id  session_date  mb_used
0     1000            12  1901.47
1     1001             8   284.68
2     1001            11   152.15
3     1001            12  1417.96

推荐阅读