[英]Returning nlargest for nested sorted dataframe using 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
現在,我希望從數據框中獲取每個州的人口最多的縣。 沒有與熊貓共事,我最初的猜測是要做一個。 這樣的事情(顯然是錯誤的):
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
即使輸入此字詞,我也知道這並不完全有意義,但我不確定如何更好地解釋它。 希望有人能幫忙。
干杯
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
你可以用
df.sort_values('State', 'Population')
之后,您可以使用
df.groupby('State').head(3)
簡而言之:
s = df.sort_values(['State','Population'],ascending=False).groupby('State').head(3)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.