I have a dataframe which has numbers in all column's. I would like to find the minimum value of each column and replace them with a given set of values. I tried idxmin with iloc, but no luck , may be I'm using them in the wrong way. Any help is appreciated.
df = abs(pd.DataFrame(np.random.randn(4, 4)))
print (df)
print (df[df!=0].min(axis=0))
newvalues =[1,2,3,4]
Lets say the input is
          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
Expected Output would be
          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
                By using 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
Or 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
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With