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

我有一个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.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,很高兴我能帮忙:)