我有按 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 |
我已经使用 cumsum
和 cumcount
查看了各种选项,但我似乎无法弄清楚这一点。
答案 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