首页 > 解决方案 > Python Pandas 条件求和并减去前一行

问题描述

我是新来的,我需要一些关于 python pandas 的帮助。我需要帮助创建一个新列,在其中我得到另一个列的总和 + 这个计算行的前一行。

这是我的例子:

df = pd.DataFrame({
'column0': ['x', 'x', 'y', 'x', 'y', 'y', 'x'],
'column1': [50, 100, 30, 0, 30, 80, 0], 
'column2': [0, 0, 0, 10, 0, 0, 30],
})
print(df)
    column0  column1  column2
 0       x       50        0
 1       x      100        0
 2       y       30        0
 3       x        0       10
 4       y       30        0
 5       y       80        0
 6       x        0       30

我使用 loc 来过滤这个 DataFrame,如下所示:

 df = df.loc[df['column0'] == 'x']
 df = df.reset_index(drop=True)

现在...当我尝试获取输出时,我没有得到正确的结果:

df['Result'] = df['column1'] + df['column2']
df['Result'] = df['column1'] + df['column2'] + df['Result'].shift(1)

print(df)
   column0  column1  column2  Result
0       x       50        0     NaN
1       x      100        0   100.0
2       x        0       10    10.0
3       x        0       30    30.0

我只想要这个输出....

   column0  column1  column2  Result
0       x       50        0     50
1       x      100        0   150.0
2       x        0       10   160.0
3       x        0       30   190.0

非常感谢!

标签: python-3.xpandasdataframe

解决方案


您可以使用.cumsum()计算列的累积总和:

df = pd.DataFrame({
    'column1': [50, 100, 30, 0, 30, 80, 0], 
    'column2': [0, 0, 0, 10, 0, 0, 30],
})

df['column3'] = df['column1'].cumsum() - df['column2'].cumsum()

这导致:

    column1 column2 column3
0    50     0        50
1   100     0       150
2    30     0       180
3     0    10       170
4    30     0       200
5    80     0       280
6     0    30       250

推荐阅读