熊猫分组并跨多列计数

时间:2021-07-19 17:22:19

标签: python pandas dataframe counter

我有按 ID、Year 排序的数据,然后是一系列事件标志,指示在那一年该 ID 是否发生了某件事:

<头>
ID x y z
1 2015 0 1 0
1 2016 1 1 0
1 2017 0 1 1
2 2015 1 0 1
2 2016 1 1 0
2 2017 0 1 1

我想按 ID 和年份分组,并对每个“事件”列应用累积计数,这样我就会得到类似以下内容的内容

<头>
ID x_total y_total z_total
1 2015 0 1 0
1 2016 1 2 0
1 2017 1 3 1
2 2015 1 0 1
2 2016 2 1 1
2 2017 2 2 2

我已经使用 cumsumcumcount 查看了各种选项,但我似乎无法弄清楚这一点。

1 个答案:

答案 0 :(得分:0)

您可以使用 .groupby() + .cumsum() 来获取每个“事件”列的累积计数。然后将 _total 作为后缀添加到 .add_suffix() 列名,然后加入前 2 列:

df[['ID', 'Year']].join(df.groupby('ID')[['x', 'y', 'z']].cumsum().add_suffix('_total'))

结果:

   ID  Year  x_total  y_total  z_total
0   1  2015        0        1        0
1   1  2016        1        2        0
2   1  2017        1        3        1
3   2  2015        1        0        1
4   2  2016        2        1        1
5   2  2017        2        2        2