将负行值与前一行熊猫相加

Ste*_*faM 5 python dataframe python-3.x pandas

我无法找到一种好方法来查找列中的所有负条目并将它们向上移动到列中,将它们与现有条目相加(即从当前条目中减去负条目),直到所有值都是正值。

重要的是,最终数据帧没有负值 & 所有以前的负条目 = 0。此外,该表是重复的,这意味着我需要根据 ID 和条目汇总结果(只对相同 ID 的条目进行求和)。

基于此处已提供的表格:

展示:

ID 日期 参赛作品
1 2013年 100
1 2014年 0
1 2015年 60
1 2016年 -30
1 2017年 0
1 2018年 50
1 2019年 0
1 2020年 -20
2 2013年 100
2 2014年 0
2 2015年 60
2 2016年 -30
2 2017年 0
2 2018年 50
2 2019年 0
2 2020年 -20

期望:

ID 日期 参赛作品
1 2013年 100
1 2014年 0
1 2015年 30
1 2016年 0
1 2017年 0
1 2018年 30
1 2019年 0
1 2020年 0
2 2013年 100
2 2014年 0
2 2015年 30
2 2016年 0
2 2017年 0
2 2018年 30
2 2019年 0
2 2020年 0

ank*_*_91 7

您可以在创建组后尝试反向 cumsum,然后屏蔽:

s = df['Entries'].gt(0).cumsum()
u= df['Entries'][::-1].groupby(s).cumsum().mask(df['Entries'].le(0),0)
out = df.assign(New_Entries=u) # you can assign to the original column too.
Run Code Online (Sandbox Code Playgroud)
print(out)
    ID  Date  Entries  New_Entries
0    1  2013      100          100
1    1  2014        0            0
2    1  2015       60           30
3    1  2016      -30            0
4    1  2017        0            0
5    1  2018       50           30
6    1  2019        0            0
7    1  2020      -20            0
8    2  2013      100          100
9    2  2014        0            0
10   2  2015       60           30
11   2  2016      -30            0
12   2  2017        0            0
13   2  2018       50           30
14   2  2019        0            0
15   2  2020      -20            0
Run Code Online (Sandbox Code Playgroud)

  • 杰出的 !+1。 (2认同)