pandas用其他列中的下一个值替换零

时间:2016-12-22 10:09:39

标签: python pandas

我有一个数据框

 A    B
10   20
20   25
30    0
35    40
45    0
60    70

我想用B中的下一行值替换B列中的0。 所以它将成为

  A     B
 10    20
 20    25
 30   '35'
'35'   40
 45   '60'
'60'   70

2 个答案:

答案 0 :(得分:2)

您可以shift并使用loc

进行设置
In [219]: df.loc[df.B == 0, 'B'] = df.A.shift(-1)

In [220]: df
Out[220]:
    A     B
0  10  20.0
1  20  25.0
2  30  35.0
3  35  40.0
4  45  60.0
5  60  70.0

答案 1 :(得分:0)

在这里,我们可以使用方法链.replace().fillna()。当你有连续的零并且默认使用最后的非零读数时,这将很有效。

import numpy as np
import pandas as pd

df.replace(0, np.nan).fillna(method='ffill')

如果您希望它只填充一次,那么您可以执行以下操作,

df.replace(0, np.nan).fillna(method='ffill', limit=1)

最后,如果你可以进一步将这些方法链接到回填,你应该从零读取开始。

df.replace(0, np.nan).fillna(method='ffill').fillna(method='bfill')