Python 熊猫-删除每行的前导零和尾随零
我想在我的df中删除前面的零值并逐行测试它们,然后让它们转换为“对齐” 下面的例子可能是最好的证明 初始df:Python 熊猫-删除每行的前导零和尾随零,python,pandas,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
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
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 0.0 0.0 4.0 NaN NaN NaN
请注意,真值字符串中可能有零,因此需要在第一次/反向第一次出现时停止。这可能吗?谢谢。使用:
修剪一维数组或序列的前导和/或尾随零
使用:
修剪一维数组或序列的前导和/或尾随零
您可以使用以下选项:
df_out = df.apply(lambda x: pd.Series(x.loc[x.mask(x == 0).first_valid_index():
x.mask(x == 0).last_valid_index()].tolist()),
axis=1)
df_out.set_axis(df.columns[df_out.columns], axis=1, inplace=False)
输出:
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
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 0.0 0.0 4.0 NaN NaN NaN
N您可以使用:
df_out = df.apply(lambda x: pd.Series(x.loc[x.mask(x == 0).first_valid_index():
x.mask(x == 0).last_valid_index()].tolist()),
axis=1)
df_out.set_axis(df.columns[df_out.columns], axis=1, inplace=False)
输出:
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
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 0.0 0.0 4.0 NaN NaN NaN
N这是删除所有零,而不仅仅是在零之前和对零进行测试。@AmyChodorowski您是对的。我修改了这个解决方案。谢谢你让我知道。这是删除所有的零,而不仅仅是前置和试用零。@AmyChodorowski你说得对。我修改了这个解决方案。谢谢你让我知道。