我正在努力寻找能够列出大量具有多个过滤级别的数据的数据框。所以我的数据现在按字母顺序按州名排序。第二个过滤级别适用于每个县的人口数据。我使用的过滤是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
即使在打字时,我知道它并不完全有意义,但我不确定如何更好地解释它。希望有人可以提供帮助。
干杯
答案 0 :(得分:5)
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)