在每个子组内排序并汇总前三个值

时间:2016-11-13 05:40:04

标签: python pandas

我有一个pandas数据框,有三列,State_Name,County_Name,Population。人口是一种数字数据。我想回答的问题只是看每个州三个人口最多的县,三个人口最多的州是什么。所以我想首先我需要通过State_Name和County_Name进行分组。我能做到。但在那之后我对如何继续感到困惑。我是熊猫新手,所以指导会有所帮助

1 个答案:

答案 0 :(得分:3)

这是一些虚拟数据(请在将来随时提供您的数据样本)。

State_Name,County_Name,Population
State1,State1_A,100
State1,State1_B,8000
State1,State1_C,75
State1,State1_D,876
State1,State1_E,2938
State2,State2_A,200
State2,State2_B,16000
State2,State2_C,75
State2,State2_D,876
State2,State2_E,5876

让我们将索引设置为State_Name和County_Name,然后选择'Population'列,这样我们就会返回一个多索引的pandas.Series

df = pd.read_clipboard() # Could have done index_col=[0,1] here
df = df.set_index(['State_Name','County_Name'])
s = df.Population

现在你可以做Series.groupby然后使用nlargest(不适用于数据帧,这就是我使用系列的原因):

s.groupby(level='State_Name').nlargest(3)

State_Name  State_Name  County_Name
State1      State1      State1_B        8000
                        State1_E        2938
                        State1_D         876
State2      State2      State2_B       16000
                        State2_E        5876
                        State2_D         876
Name: Population, dtype: int64