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

时间:2016-10-28 10:40:24

标签: python pandas

我正在努力寻找能够列出大量具有多个过滤级别的数据的数据框。所以我的数据现在按字母顺序按州名排序。第二个过滤级别适用于每个县的人口数据。我使用的过滤是int o1offset = o1.startsWith("|") ? 1 : 0; int o2offset = o2.startsWith("|") ? 1 : 0; return o1.substring(o1offset).compareTo(o2.substring(o2offset)); 。我现在需要提取每个州最高的三个人口县数,我不知道如何追求这个。

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

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

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

干杯

2 个答案:

答案 0 :(得分:5)

我认为groupby需要nlargest

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

然后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

答案 1 :(得分:0)

您可以使用

df.sort_values('State', 'Population')

之后,您可以使用

df.groupby('State').head(3)

简而言之:

s = df.sort_values(['State','Population'],ascending=False).groupby('State').head(3)