【问题标题】:Pandas- Fill nans up until first non NULL valuePandas- 填充 nans 直到第一个非 NULL 值
【发布时间】:2019-11-01 05:04:58
【问题描述】:

我有一个类似的数据框

A    B    C
1    nan  nan
2    nan  5
3    3    nan
4    nan  nan

我如何只填充每个系列的 NULL(用 0)直到第一个非 NULL 值,导致

A    B    C
1    0    0
2    0    5
3    3    nan
4    nan  nan

【问题讨论】:

    标签: python pandas dataframe null


    【解决方案1】:

    使用pandas.DataFrame.ffillnotnawhere 有点技巧:

    df.where(df.ffill().notna(), 0)
    

    或者使用pandas.DataFrame.interpolate:

    df.interpolate('zero', fill_value=0, limit_direction='backward')
    

    输出:

       A    B    C
    0  1  0.0  0.0
    1  2  0.0  5.0
    2  3  3.0  NaN
    3  4  NaN  NaN
    

    【讨论】:

      【解决方案2】:

      这将使用wheremask 完成。

      df.mask(df.notna().cumsum().eq(0), 0)
      # or,
      df.where(df.notna().cumsum().ne(0), 0)
      
         A    B    C
      0  1  0.0  0.0
      1  2  0.0  5.0
      2  3  3.0  NaN
      3  4  NaN  NaN
      

      这里有很多剥猫皮的方法:-)

      【讨论】:

        【解决方案3】:

        由于 0 + nan 是 nan 这有效:

        xf = df.fillna(0) + df.bfill()*0
        

        【讨论】:

          【解决方案4】:

          上面的好答案。或者,如果您想为特定列执行此操作:

          df[columnName][:df[columnName].first_valid_index()].fillna(0, inplace=True)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-09-23
            • 2021-05-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-21
            • 1970-01-01
            相关资源
            最近更新 更多