首页 > 解决方案 > 将负行值与前一行 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

标签: pythonpython-3.xpandasdataframe

解决方案


您可以在创建组后尝试反向 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.

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

推荐阅读