代码之家  ›  专栏  ›  技术社区  ›  ZhouW

熊猫:用列中的下一个非零值替换第一行中的所有0?

  •  1
  • ZhouW  · 技术社区  · 6 年前

    我有一个csv,如下所示:

    我想将第一行中的任何0替换为该列中的下一个非0值-例如,在上面的第一行中,“动量”应更改为0.14396667,“其他”列的第一行应为0.9153612171等(第二行和下一行将不变)。大熊猫应该怎么做?这个csv有几十个列,所以我想要一个解决方案,它不需要手动输入和逐个迭代列。

    我想将第一行中的任何0替换为该列中的下一个非0值-例如,在上面的第一行中,“动量”应更改为0.14396667,“其他”列的第一行应为0.9153612171等(第二行和下一行将不变)。大熊猫应该怎么做?这个csv有几十列,所以我想要一个解决方案,它不需要手动输入和逐个迭代列。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Alexander    6 年前

    这应该能完成工作。把零填上 np.nan 值、回填并获取第一行并将其重新分配给原始数据帧。

    df.iloc[0, :] = df.replace(0, np.nan).bfill().iloc[0, :]
    
        2
  •  1
  •   tawab_shakeel    6 年前

    用NaN替换0
    使用bfill()。

    import numpy as np
    cols = list(df.columns)
    
    # check if zero exist in string or integer
    
    df2[cols] = df2[cols].replace({0:np.nan})
    
    df[cols] = df[cols].bfill()