如何创建宏以遍历Pandas Dataframe中的所有列?

时间:2019-06-19 18:22:10

标签: python pandas pandas-groupby

我正在分析来自足球运动员的信息的数据集。我有足球运动员的名字,他的俱乐部和所有技能。我想从俱乐部中获取所有球员的均值,并检查该俱乐部更好的技能。例如,哪个俱乐部拥有更快的球员,最高的球员等等。

这是我的数据:

import pandas as pd

df = pd.DataFrame(
    {
        "Club": ["Palmeiras", "SPFC", "Corinthians", "Palmeiras", "SPFC"],
        "Player": ["FFFFF", "EEEE", "DDDD", "CCCC", "BBBB"],
        "Balance": [70, 80, 90, 50, 60],
        "Speed": [90, 89, 70, 88, 80],
        "Aggression": [70, 74, 80, 85, 66],
    }
)

在此示例中,我得到的俱乐部平均速度最高:

print("Club with highest speed: " + df.groupby("Club")["Speed"].mean().reset_index().sort_values("Speed", ascending=False).iloc[0, 0])

我想为所有技能,速度最快的俱乐部,平衡最高的俱乐部等等打印相同的内容。我以为可以使用与之前使用df.iterrows()类似的方法,但是,我很难将其与groupby函数结合使用。

我也找到了这个示例How to loop over grouped Pandas dataframe?,但对我来说不起作用。

2 个答案:

答案 0 :(得分:3)

您希望结合使用groupby().mean()来获得各个俱乐部的所有均值统计数据,并结合idxmax()来识别具有最大均值的俱乐部:

df.groupby('Club').mean().idxmax()

输出:

Balance       Corinthians
Speed           Palmeiras
Aggression    Corinthians
dtype: object

答案 1 :(得分:0)

我认为@Quang Hoang已经解决了您的问题,但是如果您想在一个数据框中获得所有内容,则可以执行以下操作。

means = df.groupby('Club').mean().max()
best = df.groupby('Club').mean().idxmax()
res = pd.DataFrame([means, best], index=['Mean', 'Team']).T

In [1]: print(res)
Out[1]: 
            Mean    Team
Balance     90      Corinthians
Speed       89      Palmeiras
Aggression  80      Corinthians