如何根据groupby +最大结果过滤数据框?

时间:2019-06-19 16:47:37

标签: python pandas dataframe group-by

我有一个与所有FIFA 19球员在一起的数据框。我已经使用 group by 来获得球员水平最高的前10个国家/地区(最佳,即总体平均水平最高的国家),仅包括数据框内拥有250名以上球员的国家/地区。

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

现在,我想获取整个数据框,包括所有列,但仅包含前10个国家/地区。我该怎么办?

更新:

创建示例以更好地说明:

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 个答案:

答案 0 :(得分:1)

您可以在“前N个”数据框中使用country的值来子集原始数据框。

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'])]