按多列分组并计算平均和

时间:2019-01-15 14:02:03

标签: python-3.x pandas-groupby

我有以下数据框:

Customer    Category    Month   Mon_exp
  1            A          1      200
  1            A          1      100
  1            A          2      150
  1            B          2      150
  1            B          3      300
  2            A          1      300
  2            A          1      200
  2            A          2      150
  2            B          2      150
  2            B          3      400

预期数据框:

Customer    Category    Month   Mon_exp Ave_Mon_exp
   1          A           1      200    300
   1          A           1      100    300
   1          A           2      150    300
   1          B           2      150    300
   1          B           3      300    300
   2          A           1      300    400
   2          A           1      200    400
   2          A           2      150    400
   2          B           2      150    400
   2          B           3      400    400

新列“ Ave_Mon_exp”的说明:

1)对于每个客户,将“ Mon_exp”加起来并除以唯一的“月”值计数。

例如客户-1,“ Mon_exp”的总和为900,唯一“ Month”值的计数为3。因此Ave_Mon_exp为300。

任何人都可以帮助我派生新列'Ave_Mon_exp'吗?

谢谢

1 个答案:

答案 0 :(得分:0)

import pandas as pd

sample_df = pd.DataFrame({'Customer':[1,1,1,1,1,2,2,2,2,2],'Category':['A','A','A','B','B','A','A','A','B','B'], 'Month': [1,1,2,2,3,1,1,2,2,3], 'Mon_exp': [200, 100, 150, 150, 300,300,200,150,150,400]})

new_col = sample.groupby('Customer')['Mon_exp'].sum()/ sample.groupby('Customer')['Month'].nunique()
new_col.name = 'Customer'
sample = sample.join(new_col, on='Customer', rsuffix='_Ave_Mon_exp')

print(sample_df)