【问题标题】:Finding cumulative sum based on a condition in python根据python中的条件查找累积和
【发布时间】:2019-11-25 07:30:21
【问题描述】:

我想在 pandas 数据框中实现以下内容。我无法找到解决方案,希望得到您的帮助。


输入


A  |  B | C
1  |100 |             
1  | 10 | 30           
1  | 20 |        
1  | 30 |    

输出


A  |  B  | C            
1  | 100 |             
1  | 110 | 30            
1  | 100 | (110+20)-30        
1  | 130 |

【问题讨论】:

  • A 列是 ID,我想要所有类似 ID 的累积总和
  • 20是什么意思,为什么要减去30?
  • @DYZ 在第 3 行中,您可以将 20 添加到 110,因为您想要 col B 的 cumsum,但您还要减去 col C 的 30
  • @DYZ (110+20)-30 只是对B列第3行如何派生的描述。很抱歉造成混乱。
  • @NishitMehra 你可以计算 col B 和 col C 的 cumsum,然后减去 B-C。

标签: python python-3.x pandas cumulative-sum


【解决方案1】:

假设您想要列 'A' 中的 id 列 'B' 的累积总和,以及列 'C' 的子部分在该行之前,请执行以下操作:

df = pd.DataFrame([[1, 100, 0], [1, 10, 30], [1, 20, 0], [1, 30, 0], [2, 15, 0]], columns=['A', 'B', 'C'])
df['cumsum'] = df.groupby('A').cumsum()['B'] - df.groupby('A').shift().cumsum()['C'].fillna(0)
df

输出:

  A    B    C    cumsum
0 1  100    0     100.0 
1 1   10   30     110.0 
2 1   20    0     100.0 
3 1   30    0     130.0 
4 2   15    0      15.0 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 2017-05-16
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多