Shi*_*ijo 4 python dataframe pandas
我有一个数据框,其中包含所有列中的数字.我想找到每列的最小值,并用给定的值集替换它们.我用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]
Run Code Online (Sandbox Code Playgroud)
让我们说输入是
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
Run Code Online (Sandbox Code Playgroud)
预期产出将是
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
Run Code Online (Sandbox Code Playgroud)
通过使用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
Run Code Online (Sandbox Code Playgroud)
要么 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
Run Code Online (Sandbox Code Playgroud)