Python 获取数据帧中特定行上的最大值的列名

Python 获取数据帧中特定行上的最大值的列名,python,pandas,Python,Pandas,在数据帧中 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 我想获得某行上具有最大值的单元格的列名 所需的输出将

在数据帧中

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)

如果不重复,则可以使用,但它只返回
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
但对于重复使用:

其功能是:

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']

您还可以使用apply并创建一个方法,例如:

def returncolname(row, colnames):
    return colnames[np.argmax(row.values)]

df['colmax'] = df.apply(lambda x: returncolname(x, df.columns), axis=1)

Out[62]: 
row1    col2
row2    col1
row3    col1
dtype: object
可以使用df.max(axis=1)提取最大值

df.max(axis=1)
Out[69]: 
row1    3
row2    2
row3    3
def returncolname(row, colnames):
    return colnames[np.argmax(row.values)]

df['colmax'] = df.apply(lambda x: returncolname(x, df.columns), axis=1)

Out[62]: 
row1    col2
row2    col1
row3    col1
dtype: object
df.max(axis=1)
Out[69]: 
row1    3
row2    2
row3    3