Python 如何使用上一行的值以及同一行中其他列的值来计算表中某列的值

Python 如何使用上一行的值以及同一行中其他列的值来计算表中某列的值,python,pandas,Python,Pandas,我有一个数据帧df: import pandas as pd df = pd.DataFrame({'A': [1, 1, 1,2,2,2,2], 'B': [10, 0, 0,5,0,0,0], 'C': [1,1,2,2,3,3,3], 'D': [2,3,4,5,2,3,4]}) 这看起来像: A B C D 0 1 10 1 2 1 1 0 1 3 2

我有一个数据帧
df

import pandas as pd    
df = pd.DataFrame({'A': [1, 1, 1,2,2,2,2], 
               'B': [10, 0, 0,5,0,0,0], 
               'C': [1,1,2,2,3,3,3],
               'D': [2,3,4,5,2,3,4]})
这看起来像:

   A   B  C  D
0  1  10  1  2
1  1   0  1  3
2  1   0  2  4
3  2   5  2  5
4  2   0  3  2
5  2   0  3  3
6  2   0  3  4
我只想计算列
B
中的值,其中列
A
中表示的所有组(根据示例数据为1,2)的值均为0

B的值
=前一记录中的列B的值+同一记录中的列
C
的值+同一记录中的列
D
的值

我的预期产出是:

   A   B  C  D
0  1  10  1  2
1  1  14  1  3
2  1  20  2  4
3  2   5  2  5
4  2  10  3  2
5  2  16  3  3
6  2  23  3  4

我怎样才能在熊猫中做到这一点?

IIUC two
cumsum

s=df[['C','D']].mask(df.B!=0)

df.groupby('A').B.cumsum()+s.groupby(df.A).cumsum().sum(1)
Out[633]: 
0    10.0
1    14.0
2    20.0
3     5.0
4    10.0
5    16.0
6    23.0
dtype: float64
这应该做到:

def f(g):
    g.B = (g.B.shift() + g.C + g.D).cumsum()
    return g

df.B.replace(0, df.groupby('A').apply(f).B)
结果是:

   A   B  C  D
0  1  10  1  2
1  1  14  1  3
2  1  20  2  4
3  2   5  2  5
4  2  10  3  2
5  2  16  3  3
6  2  23  3  4

更多信息:-)嘿@WeNYoBen,谢谢你的链接-这真的很有用!我在回答这个问题时的理由是,用下面的话来说:“
GroupBy.apply
在这里通常很好,只要您在自定义函数中使用的方法本身是矢量化的”。但是对于任何使用
apply
.Yw:-)快乐编码的人来说,这是一个非常有用的讨论