python - 包含最大值的列的名称

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

最佳答案

您可以使用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/

相关文章:

python - 无法在 django 1.11 中使用 python 2.7 连接 mysql,同时安装 mysqlclient 和 MySQL-python 时出现错误

python - Python 中的无与空字符串

python - 如果字符串中的单词与单独系列中的单词匹配,则替换它们

python - Pandas NamedAgg 错误 : module 'pandas' has no attribute 'NamedAgg'

python - Pandas 数据帧错误 : matplotlib. axes._subplots.AxesSubplot

python - 如何删除xarray中的网格点?

sql - 获取 Hive 中某一行的最大值的列

PYTHON - 在循环中创建多个列表

r - 在非连续时间序列中找到某个时间范围内的最大值

SQL:如果另一列不匹配,如何排除最大值