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

Pandas-删除每行的前导和尾随零

  •  1
  • swifty  · 技术社区  · 7 年前

    我要删除零值的前一个值和三个值 顺排 在我的df中,然后让他们移动到“对齐”。

    最好用下面的例子来演示。

    初始df:

    index c1 c2 c3 c4 c5 c6 c7 c8
    1      0  0  1  2  3  4  5  0
    2      0  0  0  1  2  3  4  5
    3      0  1  2  3  0  0  0  0
    4      0  0  1  2  3  4  0  0
    5      1  2  3  4  5  6  7  0
    6      0  0  0  1  0  0  4  0
    

    输出:

    index c1 c2 c3 c4 c5 c6 c7
    1      1  2  3  4  5  
    2      1  2  3  4  5
    3      1  2  3  
    4      1  2  3  4  
    5      1  2  3  4  5  6  7  
    6      1  0  0  4 
    

    注意,在真值的“字符串”中可能有零,因此需要在第一次/反转第一次出现时停止。这可能吗?谢谢。

    2 回复  |  直到 7 年前
        1
  •  4
  •   user3483203    7 年前

    使用 np.trim_zeros

    修剪一维数组或序列的前导和/或尾随零。

    out = pd.DataFrame([np.trim_zeros(i) for i in df.values], index=df.index)
    out.columns = df.columns[:len(out.columns)]
    
           c1  c2  c3   c4   c5   c6   c7
    index
    1       1   2   3  4.0  5.0  NaN  NaN
    2       1   2   3  4.0  5.0  NaN  NaN
    3       1   2   3  NaN  NaN  NaN  NaN
    4       1   2   3  4.0  NaN  NaN  NaN
    5       1   2   3  4.0  5.0  6.0  7.0
    6       1   0   0  4.0  NaN  NaN  NaN
    
        2
  •  2
  •   Scott Boston    7 年前

    df_out = df.apply(lambda x: pd.Series(x[x != 0].dropna().values), axis=1)
    df_out.set_axis(df.columns[df_out.columns], axis=1, inplace=False)
    

    输出:

            c1   c2   c3   c4   c5   c6   c7
    index                                   
    1      1.0  2.0  3.0  4.0  5.0  NaN  NaN
    2      1.0  2.0  3.0  4.0  5.0  NaN  NaN
    3      1.0  2.0  3.0  NaN  NaN  NaN  NaN
    4      1.0  2.0  3.0  4.0  NaN  NaN  NaN
    5      1.0  2.0  3.0  4.0  5.0  6.0  7.0
    6      1.0  4.0  NaN  NaN  NaN  NaN  NaN