我有一个数据框,所有列都有数字。我想找到每列的最小值并用一组给定的值替换它们。我用 iloc 尝试了 idxmin,但没有成功,可能是我以错误的方式使用它们。任何帮助表示赞赏。
df = abs(pd.DataFrame(np.random.randn(4, 4)))
print (df)
print (df[df!=0].min(axis=0))
newvalues =[1,2,3,4]
假设输入是
0 1 2 3
0 2.776975 1.433614 0.147925 0.032635
1 1.328099 0.050764 0.255676 0.360205
2 0.614594 0.547384 0.791848 0.340333
3 1.475486 0.114053 0.904416 0.060585
预期输出为
0 1 2 3
0 2.776975 1.433614 3 4
1 1.328099 2 0.255676 0.360205
2 1 0.547384 0.791848 0.340333
3 1.475486 0.114053 0.904416 0.060585
最佳答案
通过使用mask
、eq
、mul
df.mask(df.eq(df.min(0),1),df.eq(df.min(0),1).mul([1,2,3,4]))
Out[41]:
0 1 2 3
0 2.776975 1.433614 3.000000 4.000000
1 1.328099 2.000000 0.255676 0.360205
2 1.000000 0.547384 0.791848 0.340333
3 1.475486 0.114053 0.904416 0.060585
或者np.putmask
v=df.values
np.putmask(v, v==np.min(v,0), [1,2,3,4])
df
Out[72]:
0 1 2 3
0 2.776975 1.433614 3.000000 4.000000
1 1.328099 2.000000 0.255676 0.360205
2 1.000000 0.547384 0.791848 0.340333
3 1.475486 0.114053 0.904416 0.060585
关于python - Pandas 用值列表替换最小值 - 逐行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47400561/