将for循环中的值替换为数据框的下一行的单元格的值

时间:2017-03-05 14:11:02

标签: python pandas dataframe

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

感谢您的帮助!

1 个答案:

答案 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