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:-)快乐编码的人来说,这是一个非常有用的讨论