Pandas - 从每一行中删除前导和尾随零

swi*_*fty 1 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
Run Code Online (Sandbox Code Playgroud)

输出:

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 
Run Code Online (Sandbox Code Playgroud)

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

use*_*203 5

使用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
Run Code Online (Sandbox Code Playgroud)