首页 > 解决方案 > 查找特定行的多个列的最大值并将最大列的标题保存到新列中

问题描述

我有一个这样的数据框

age     col1   col2   col3     max
--------------------------------------
  0     200    150    350             
 16      68    250    50 

我想为每一行找到 col1、col2、col3 之间的最大值,并用最大值的列名更新最后一列“max”

第一行的示例,最大值为 350,“max”列值将是“col3”结果,如下所示:

age      col1   col2   col3      max
------------------------------------------
  0      200    150    350     col3
 16       68    250    50      col2

我怎样才能做到这一点?

标签: python-3.xpandasdataframe

解决方案


您可以使用以下方法执行此操作pandas.DataFrame.idxmax

>>> df['max'] = df.idxmax(axis=1)
>>> df
   age  col1  col2  col3   max
0    0   200   150   350  col3
1   16    68   250    50  col2

NB1:如图所示,我将使用max_而不是max作为新列名,因为max它指的是现有方法,即pandas.DataFrame.max.

NB2:另外,为了防止age在搜索最大值时被考虑,最好明确/限制搜索空间

>>> mxseaspace = ['col1', 'col2', 'col3']
>>> df['max_'] = df.loc[:, mxseaspace].idxmax(axis=1)
>>> df
   age  col1  col2  col3  max_
0    0   200   150   350  col3
1   16    68   250    50  col2

玩具数据

df = pd.DataFrame({
    'age':  [0, 16],
    'col1': [200, 68],
    'col2': [150, 250],
    'col3': [350, 50],
})

推荐阅读