result = []
EB = 0.0
i=int()
for i in df['A']:
EB = max(EB + i , 0)
result.append(EB)
df['D'] = result
输入df是:
A | B | C
-0,20 | 0,40 | 0,50
0,54 | 0,20 | 0,80
-0,18 | 0,80 | -4,00
*0,00 | 0,00 | 0,00*
0,10 | 0,90 | 0,60
当'df'行中的所有值都是'0.0'时,EB应该取与列['B']相关的单元格值和行:'i + 1'。
我需要知道如何在for循环中创建这个条件。
所需的输出df如下:
A | B | C | D
-0,20 | 0,40 | 0,50 | 0,0
0,54 | 0,20 | 0,80 | 0,54
-0,18 | 0,80 |-4,00 | 0,36
0,00 | 0,00 |0,00 | 0,90
0,10 | 0,90 | 0,60 | 1,00
感谢您的帮助!
答案 0 :(得分:0)
试试这个:
result = []
EB = 0.0
for t in df.assign(S=df.sum(1), next_B=df.B.shift(-1)).itertuples():
if t.S == 0:
EB = t.next_B
else:
EB = max(EB + t.A, 0)
result.append(EB)
df['D'] = result
结果:
In [238]: df
Out[238]:
A B C D
0 -0.20 0.4 0.5 0.00
1 0.54 0.2 0.8 0.54
2 -0.18 0.8 -4.0 0.36
3 0.00 0.0 0.0 0.90
4 0.10 0.9 0.6 1.00
Helper虚拟DF:
In [10]: df.assign(S=df.sum(1), next_B=df.B.shift(-1))
Out[10]:
A B C S next_B
0 -0.20 0.4 0.5 0.70 0.2
1 0.54 0.2 0.8 1.54 0.8
2 -0.18 0.8 -4.0 -3.38 0.0
3 0.00 0.0 0.0 0.00 0.9
4 0.10 0.9 0.6 1.60 NaN