获取pandas DataFrame中某一行的最大值的列名称
问题内容:
在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)
?
问题答案:
如果不重复,则可以使用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']