簡體   English   中英

使用Pandas返回最大的嵌套排序數據框

[英]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

即使輸入此字詞,我也知道這並不完全有意義,但我不確定如何更好地解釋它。 希望有人能幫忙。

干杯

我認為您需要使用nlargest groupby

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM