python - Pandas 用值列表替换最小值 - 逐行

标签 python pandas dataframe

我有一个数据框,所有列都有数字。我想找到每列的最小值并用一组给定的值替换它们。我用 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

最佳答案

通过使用maskeqmul

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/

相关文章:

python - 在 pandas 数据框中实现多个 if else 条件

python - 使用 groupby 后更新应用内的数据框

python - 使用 re 从 .pgn (字符串行)构建数据框

regex - 如何将 map 与具有正则表达式键的字典一起使用?

python - 保留基于另一个数组的数组中的唯一值,同时保留顺序

python - Python 3 的 WSGI 服务器(PEP 3333)

python - Pandas dataframe - 根据两列的 ID 查找匹配的行

Python Dataframe如何使用groupby求和行值

python - 打包 Python egg 时如何排除 .gitignore 中的文件?

python - 你如何使用 Pyscript 输入和输出文本?