获取pandas DataFrame中某一行的最大值的列名称

发布于 2021-01-29 16:39:38

在DataFrame中

import pandas as pd 
df=pd.DataFrame({'col1':[1,2,3],'col2':[3,2,1],'col3':[1,1,1]},index= ['row1','row2','row3'])
print df
       col1  col2  col3
row1     1     3     1
row2     2     2     1
row3     3     1     1

我想获取某一行中具有最大值的单元格的列名称。

所需的输出为(以伪代码):

get_column_name_for_max_values_of(row2)
>['col1','col2']

最简洁的表达方式是什么

get_column_name_for_max_values_of(row2)

关注者
0
被浏览
223
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    如果不重复,则可以使用idxmax,但它仅返回max值的第一列:

    print (df.idxmax(1))
    row1    col2
    row2    col1
    row3    col1
    dtype: object
    
    def get_column_name_for_max_values_of(row):
        return df.idxmax(1).ix[row]
    
    print (get_column_name_for_max_values_of('row2'))
    col1
    

    但重复使用boolean indexing

    print (df.ix['row2'] == df.ix['row2'].max())
    col1     True
    col2     True
    col3    False
    Name: row2, dtype: bool
    
    print (df.ix[:,df.ix['row2'] == df.ix['row2'].max()])
          col1  col2
    row1     1     3
    row2     2     2
    row3     3     1
    
    print (df.ix[:,df.ix['row2'] == df.ix['row2'].max()].columns)
    Index(['col1', 'col2'], dtype='object')
    

    功能是:

    def get_column_name_for_max_values_of(row):
        return df.ix[:,df.ix[row] == df.ix[row].max()].columns.tolist()
    
    print (get_column_name_for_max_values_of('row2'))
    ['col1', 'col2']
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看