Python数据帧:所有数据帧中每行的操作
我有一个python中的数据帧,如下所示。列的数量不是固定的,并随着迭代而增加,而是遵循相同的模式(可以添加更多列),但为了说明我的问题,请使用我当前的Python数据帧:所有数据帧中每行的操作,python,python-3.x,pandas,numpy,Python,Python 3.x,Pandas,Numpy,我有一个python中的数据帧,如下所示。列的数量不是固定的,并随着迭代而增加,而是遵循相同的模式(可以添加更多列),但为了说明我的问题,请使用我当前的df 0 1 2 0 0.414143 13.898568 17.322851 1 24.348445 0.514046 36.663878 0 0.776340 11.541118 21.312318 0 11.700539 56.442854 22.853
df
0 1 2
0 0.414143 13.898568 17.322851
1 24.348445 0.514046 36.663878
0 0.776340 11.541118 21.312318
0 11.700539 56.442854 22.853285
2 11.599149 12.977594 4.905724
1 22.944083 0.501586 42.553746
0 4.092333 39.273114 23.406309
其思想是保持相同的dataframe
维度,计算每行的最小值,并将同一行中的其他值设置为零。最终结果应如下所示:
0 1 2
0 0.414143 0 0
1 0 0.514046 0
0 0.776340 0 0
0 11.700539 0 0
2 0 0 4.905724
1 0 0.501586 0
0 4.092333 0 0
我使用相同的格式设置了行和列索引(此索引是[0-9]范围内的整数)。与相同索引匹配的值是我希望保留的值,并将其他值设置为零
你知道我可以运用哪些功能来实现我的目标吗
感谢您的帮助。更新:相同的答案适用于更新的DF:
In [134]: df
Out[134]:
0 1 2
0 0.414143 13.898568 17.322851
1 24.348445 0.514046 36.663878
0 0.776340 11.541118 21.312318
0 11.700539 56.442854 22.853285
2 11.599149 12.977594 4.905724
1 22.944083 0.501586 42.553746
0 4.092333 39.273114 23.406309
In [135]: df[~df.eq(df.min(1), axis=0)] = 0
In [136]: df
Out[136]:
0 1 2
0 0.414143 0.000000 0.000000
1 0.000000 0.514046 0.000000
0 0.776340 0.000000 0.000000
0 11.700539 0.000000 0.000000
2 0.000000 0.000000 4.905724
1 0.000000 0.501586 0.000000
0 4.092333 0.000000 0.000000
旧答案:
许多可能的方法之一:
In [108]: df[~df.eq(df.min(1), axis=0)] = 0
In [109]: df
Out[109]:
0 1
1 0.000000 13.898568
1 0.000000 0.514046
1 0.000000 11.541118
1 0.000000 12.977594
0 11.700539 0.000000
1 0.000000 0.501586
0 2.358687 0.000000
0 22.853285 0.000000
当我只有两列时,这些代码工作得非常好。如果我添加更多(请参阅我的注释“列不修复”,则您的代码不工作。@CamiloRomero,它对我来说工作得很好-请参阅更新answer@CamiloRomero,很高兴我能帮忙:)