在数据框中找到一行的最大值并以pandas返回其列名

时间:2018-07-10 13:46:21

标签: python pandas dataframe

我有一个足球运动员数据集。我需要找到每个球员的罚球或排球的最大值,并在处添加一列,以显示最大值以及是否是罚球或排球。我尝试了以下代码:

import pandas as pd
import numpy as np
df=pd.read_excel(r'C:\Users\shrey\Desktop\FullData.xlsx')
for j,i in df.iterrows():
   data=i[['Penalties','Volleys']]
   i['max']=np.max(data)
   i['max_attr']=i.idxmax()

但这给我一个错误-此dtype不允许进行归约运算'argmax' 我应该如何处理?

1 个答案:

答案 0 :(得分:1)

您无需在此处迭代行。相反,您可以使用pd.DataFrame.maxpd.DataFrame.idxmax进行矢量化计算:

cols = ['Penalties', 'Volleys']

df['max'] = df[cols].max(1)
df['max_attr'] = df[cols].idxmax(1)

这是一个演示:

df = pd.DataFrame([[2, 3], [5, 1]], columns=['Penalties', 'Volleys'])

cols = ['Penalties', 'Volleys']

df['max'] = df[cols].max(1)
df['max_attr'] = df[cols].idxmax(1)

print(df)

   Penalties  Volleys  max   max_attr
0          2        3    3    Volleys
1          5        1    5  Penalties