使用Pandas返回嵌套排序数据帧的nlargest

gaa*_*aan 2 python pandas

我正在努力研究一个数据框,它列出了大量具有多个过滤级别的数据,如果这有意义的话.所以我的数据现在按字母顺序按州名排序.第二个过滤级别适用于每个县的人口数据.我用过的过滤是df.sort_values().我现在需要提取每个州最高的三个人口县数,我不知道如何追求这个.

所以我的数据看起来像这样(我在这里省略了行索引):

State    County    Population
Alabama  a         100
Alabama  b         50
Alabama  c         40
Alabama  d         5
Alabama  e         1
...
Wyoming  a.51      180
Wyoming  b.51      150
Wyoming  c.51      56
Wyoming  d.51      5
Run Code Online (Sandbox Code Playgroud)

现在我想从我的数据框架中获得每个州最高人口的县.我没有和熊猫一起工作,我最初的猜测是做一个.这样的事情(显然是错误的):

list_l = []
for i in df['State'].unique(): #Get a series with every unique state listed once
    list_l.append(df[(df['State'] == i])).nlargest(3)
return list_l
Run Code Online (Sandbox Code Playgroud)

即使在打字时我知道它并不完全有意义,但我不确定如何更好地解释它.希望有人能提供帮助.

干杯

jez*_*ael 5

我认为你需要groupbynlargest:

s = df.groupby('State')['Population'].nlargest(3)
print (s)
State     
Alabama  0    100
         1     50
         2     40
Wyoming  5    180
         6    150
         7     56
Name: Population, dtype: int64
Run Code Online (Sandbox Code Playgroud)

然后get_level_values从第二级并选择ix:

print (s.index.get_level_values(1))
Int64Index([0, 1, 2, 5, 6, 7], dtype='int64')

print (df.ix[s.index.get_level_values(1)])
     State County  Population
0  Alabama      a         100
1  Alabama      b          50
2  Alabama      c          40
5  Wyoming   a.51         180
6  Wyoming   b.51         150
7  Wyoming   c.51          56
Run Code Online (Sandbox Code Playgroud)