我的数据框看起来像:
Alice Eleonora Mike Helen
2 7 8 6
11 5 9 4
6 15 12 3
5 3 7 8
我想创建新列,其中每行包含给定行的最大值的列的名称
Alice Eleonora Mike Helen _Max
2 7 8 6 Mike
11 5 9 4 Alice
6 15 12 3 Eleonora
5 3 7 8 Helen
我弄清楚如何获得最大值:
df['_Max']=df[['Alice', 'Eleonora', 'Mike', 'Helen']].max(axis=1)
但是如何获取具有最大值的列的名称并将其写入_Max
而不是值本身呢?
最佳答案
您可以使用apply
使用 lambda 来返回列的名称,这里我们将值逐行与最大值进行比较,这会生成一个 bool 掩码,我们可以使用它来掩蔽列:
In [229]:
df['MAX'] = df.apply( lambda x: df.columns[x == x.max()][0], axis=1)
df
Out[229]:
Alice Eleonora Mike Helen MAX
0 2 7 8 6 Mike
1 11 5 9 4 Alice
2 6 15 12 3 Eleonora
3 5 3 7 8 Helen
这是 bool 掩码:
In [232]:
df.apply( lambda x: x == x.max(), axis=1)
Out[232]:
Alice Eleonora Mike Helen
0 False False True False
1 True False False False
2 False True False False
3 False False False True
关于python - 包含最大值的列的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34200153/