【问题标题】:Fill NaN values in a pandas DataFrame depending on values of cells to its left根据左侧单元格的值填充 Pandas DataFrame 中的 NaN 值
【发布时间】:2020-10-21 12:40:43
【问题描述】:

我试图在一个非常大的 pandas 数据框中用零填充 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,因为它的左边没有非 NaN 值,而是所有四个 [A,col2]、[A, col4]、[B,col3] 和 [B, col4]已用零填充(因为有更左的非 NaN 值)。

有没有人知道如何继续这件事?非常感谢!

【问题讨论】:

    标签: python pandas numpy dataframe


    【解决方案1】:

    使用前向填充缺失值并测试不缺失,并通过测试缺失值和此掩码分配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
    

    【讨论】:

      猜你喜欢
      • 2020-11-14
      • 2015-02-14
      • 2015-10-05
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 2023-01-13
      • 1970-01-01
      • 2016-10-31
      相关资源
      最近更新 更多