我的数据框看起来像:
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
而不是值本身?
答案 0 :(得分:1)
您可以使用apply
和lambda
来返回列的名称,这里我们将行与行的值进行比较,这会生成一个布尔掩码,我们可以使用它来掩盖列:
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
这是布尔掩码:
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