我有一个按时间降序排列的数组,索引为Race_ID
和Student_ID
。
Race_ID Date Student_ID Mark
1 1/10/2023 1 5
1 1/10/2023 2 8
1 1/10/2023 3 7
8 1/10/2023 4 4
8 1/1/2023 1 9
8 1/1/2023 2 3
8 1/1/2023 3 5
8 1/1/2023 4 10
2 11/9/2022 1 2
2 11/9/2022 2 4
2 11/9/2022 3 9
3 17/4/2022 5 3
3 17/4/2022 2 4
3 17/4/2022 3 3
3 17/4/2022 4 7
4 1/3/2022 1 4
4 1/3/2022 2 9
5 1/1/2021 1 6
5 1/1/2021 2 1
5 1/1/2021 3 8
字符串
我想创建一个新的列Seasonal_Mark
,它是每个学生Mark
的cumsum
,注意在每年的2月1日,总和被设置为零。所以期望的结果如下所示:
Race_ID Date Student_ID Mark Seasonal_Mark
1 1/10/2023 1 5 5
1 1/10/2023 2 8 8
1 1/10/2023 3 7 7
8 1/10/2023 4 4 4
8 1/1/2023 1 9 15 (4+2+9)
8 1/1/2023 2 3 20 (4+9+4+3)
8 1/1/2023 3 5 17 (9+3+5)
8 1/1/2023 4 10 17 (7+10)
2 11/9/2022 1 2 6 (4+2)
2 11/9/2022 2 4 17 (4+9+4)
2 11/9/2022 3 9 12 (9+3)
3 17/4/2022 5 3 3
3 17/4/2022 2 4 13 (4+9)
3 17/4/2022 3 3 3
3 17/4/2022 4 7 7
4 1/3/2022 1 4 4
4 1/3/2022 2 9 9
5 1/1/2021 1 6 6
5 1/1/2021 2 1 1
5 1/1/2021 3 8 8
型
先谢谢你了。
2条答案
按热度按时间0aydgbwb1#
另一种可能的解决方案是,如果日期是2月或更晚(在年份中),则创建一个调整后的年份列,该列对应于日期的年份,如果日期早于2月(在年份中),则对应于年份减1。这个新列随后在
groupby
中使用。字符串
输出量:
型
oiopk7p52#
您可以使用自定义的每年2月1日开始的
Period
作为辅助分组器,为此使用to_period
和A-JAN
作为频率:字符串
输出量:
型