在数据框中

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)

?

最佳答案

如果不重复,您可以使用 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']

关于python - 获取 Pandas DataFrame 中某一行的最大值的列名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39874501/

10-13 07:40