我有一个数据框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
中表示的所有组(每个示例数据为1,2)为0的那些位置计算A
列中的值。
列B
的值=先前记录中B列的值+同一记录中col C
的值+同一记录中col 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
如何在大熊猫中做到这一点?
答案 0 :(得分:4)
这应该做到:
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
答案 1 :(得分:1)
IIUC有两个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