熊猫-从每行中删除前导零和尾随零

时间:2018-08-15 21:57:35

标签: python pandas

我想在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 个答案:

答案 0 :(得分:4)

使用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

答案 1 :(得分:2)

您可以使用此:

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