Get column names for max values over a certain row in a pandas DataFrame
<p>In the DataFrame</p>

<pre><code>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
</code></pre>

<p>I want to get the column names of the cells with the max value(s) over a certain row. </p>

<p>The desired output would be (in pseudocode):</p>

<pre><code>get_column_name_for_max_values_of(row2)
&gt;['col1','col2']
</code></pre>

<p>What would be the most concise way to express   </p>

<pre><code>get_column_name_for_max_values_of(row2)
</code></pre>

<p>?</p>

<p>you could also use apply and create a method such has:</p>

<pre><code>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
</code></pre>

<p>an you can use df.max(axis=1) to extract maxes</p>

<pre><code>df.max(axis=1)
Out[69]: 
row1    3
row2    2
row3    3
</code></pre>

python pandas