列的名称,包含最大值

时间:2015-12-10 10:58:32

标签: python pandas max dataframe

我的数据框看起来像:

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而不是值本身?

1 个答案:

答案 0 :(得分:1)

您可以使用applylambda来返回列的名称,这里我们将行与行的值进行比较,这会生成一个布尔掩码,我们可以使用它来掩盖列:

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