Как я могу создать макрос для циклического прохождения всех столбцов в Pandas Dataframe? - PullRequest
1 голос
/ 19 июня 2019

Я анализирую набор данных с информацией от футболистов. У меня есть имя футболиста, его клуб и все навыки. Я хочу получить среднее значение всех игроков из клуба и проверить, в каком мастерстве клуб лучше. Например, в каком клубе самые быстрые игроки, самые высокие игроки и т. Д.

Вот как выглядят мои данные:

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.

Я также нашел этот пример Как перебрать сгруппированный массив данных Pandas? , но у меня это не сработало.

Ответы [ 2 ]

3 голосов
/ 19 июня 2019

Вы хотите комбинацию groupby().mean() для получения всех средних показателей по клубам и idxmax() для определения клубов с максимальным средним значением:

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

Выход:

Balance       Corinthians
Speed           Palmeiras
Aggression    Corinthians
dtype: object
0 голосов
/ 19 июня 2019

Я думаю, что @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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...