Как я могу отфильтровать мой фрейм данных на основе группового + самого большого результата? - PullRequest
0 голосов
/ 19 июня 2019

У меня есть датафрейм со всеми игроками Fifa 19. Я использовал группу по , чтобы получить 10 лучших стран с лучшими игроками (лучшими по общему среднему значению), включая только страны с более чем 250 игроками в Датафрейме.

df[df.groupby('Nationality')['Overall'].transform('size') > 250].groupby(['Nationality'])['Overall'].mean().nlargest(10)

Теперь я хочу получить весь фрейм данных, включая все столбцы, но только с этими 10 странами. Как я могу это сделать?

UPDATE:

Пример создан для лучшей иллюстрации:

import pandas as pd
df = pd.DataFrame({'user': ['Bob', 'Jane', 'Alice','Rick'], 
               'income': [40000, 50000, 42000, 10000],
              'country':['Brazil','USA','Brazil','Canada']})

df[df.groupby('country')['income'].transform('size') > 1].groupby(['country'])['income'].mean().nlargest(2)

Я хотел бы отфильтровать только Бразилию на этом фрейме данных

1 Ответ

1 голос
/ 19 июня 2019

Вы можете использовать значения country в вашем «верхнем N» фрейме данных для подмножества исходного фрейма данных.

import pandas as pd
df = pd.DataFrame({'user': ['Bob', 'Jane', 'Alice','Rick'], 
               'income': [40000, 50000, 42000, 10000],
              'country':['Brazil','USA','Brazil','Canada']})

top = df[df.groupby('country')['income'].transform('size') > 1].groupby(['country'])['income'].mean().nlargest(2)

df_top = df.loc[df['country'].isin(top.reset_index()['country'])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...