根据其左侧单元格的值在熊猫数据框中填充NaN值

时间:2020-10-21 12:40:43

标签: python pandas numpy dataframe

我试图用一个零填充一个非常大的熊猫数据框中的NaN,但前提是在同一行中但在其左侧的单元格中有非NaN值。因此,例如,从此输入DataFrame,

input = pd.DataFrame([[1, np.NaN, 1.5, np.NaN], [np.NaN, 2, np.NaN, np.NaN]], index=['A', 'B'], columns=['col1', 'col2', 'col3', 'col4'])

如下所示:

    col1    col2    col3    col4
A   1.0     NaN     1.5     NaN
B   NaN     2.0     NaN     NaN

预期输出为:

    col1    col2    col3    col4
A   1.0     0       1.5     0
B   NaN     2.0     0       0

查看[B,col1]如何保持Nan,因为它的左边没有not-NaN值,但是所有四个[A,col2],[A,col4],[B,col3]和[B,col4]填充了零(因为存在较左的非NaN值)。

有人对如何进行此操作有任何想法吗?非常感谢!

1 个答案:

答案 0 :(得分:2)

使用前向填充缺失值并测试不缺失,并通过测试缺失值并通过此掩码分配0

df[df.ffill(axis=1).notna() & df.isna()] = 0
print (df)
   col1  col2  col3  col4
A   1.0   0.0   1.5   0.0
B   NaN   2.0   0.0   0.0

或者您可以对测试值不等于0的值使用累计和:

df[df.fillna(0).cumsum(axis=1).ne(0) & df.isna()] = 0
print (df)
   col1  col2  col3  col4
A   1.0   0.0   1.5   0.0
B   NaN   2.0   0.0   0.0