這是我的輸入資料幀
df = pd.DataFrame([
['CA', 'LAX', 'Alice'],
['NY', 'NYC', 'Alice'],
['TX', 'HOU', 'Alice'],
['CA', 'SFO', 'Bob'],
['NY', 'NYC', 'Bob'],
['TX', 'AUS', 'Bob'],
['CA', 'LAX', 'Carol'],
['NY', 'ALB', 'Carol'],
['TX', 'HOU', 'Carol'],
['CA', 'LAX', 'Dan'],
['NY', 'NYC', 'Dan'],
['TX', 'DAL', 'Dan'],
['CA', 'SFO', 'Eve'],
['NY', 'NYC', 'Eve'],
['TX', 'AUS', 'Eve'],
['CA', 'SDO', 'Frank'],
['NY', 'NYC', 'Frank'],
['TX', 'HOU', 'Frank']],
columns=['State','City','Person'])
這是我希望得到的輸出:
State City Count
CA LAX 3
SFO 2
NY ALB 1
NYC 5
TX HOU 3
AUS 2
基本上,我想顯示每個州人口最多的前 2 個城市。
我試過使用這個 groupby 陳述句:
df.groupby(['State','City'])['Person'].count()
產生以下輸出
State City
CA LAX 3
SDO 1
SFO 2
NY ALB 1
NYC 5
TX AUS 2
DAL 1
HOU 3
但是我無法提出可以對上述計數進行排序并選擇最高的兩個計數的陳述句。非常感謝您的幫助!
uj5u.com熱心網友回復:
我認為你可以簡化這個方法。
您可以使用groupby.value_counts(), 而不是count(), 來獲取您所在的位置,然后鏈接另一個groupby().head(2)以獲取每個州的前 2 個城市。
原因是value_counts()結果物件將是descending有序的,因此第一個元素是最常出現的元素,因此您可以head(2)按原樣使用。
df.groupby('State')['City'].value_counts().groupby('State').head(2)
State City
CA LAX 3
SFO 2
NY NYC 5
ALB 1
TX HOU 3
AUS 2
Name: City, dtype: int64
uj5u.com熱心網友回復:
您的第一個 groupby 是正確的,之后您想根據 State 和 Count 對您的值進行排序。
然后您再次僅在狀態上分組并獲取頭部(2)。如果需要,您可以(重新)將索引設定為 State 和 City。
df2 = df.groupby(['State','City'])['Person'].count().to_frame('Count')
df2 = df2.reset_index().sort_values(['State', 'Count'], ascending=[True, False])
df2.groupby('State').head(2).set_index(['State','City'])
輸出:
Count
State City
CA LAX 3
SFO 2
NY NYC 5
ALB 1
TX HOU 3
AUS 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/392044.html
標籤:Python 熊猫 pandas-groupby 数据透视表
上一篇:將字串中的元素提取到嵌套串列中
