我創建了我的身邊一個數據幀,但排除了您的分配新建分配FY的.head(3)
:
countrypat = asiaselect.groupby('Country')['Pattern'].value_counts().groupby(level=0)
下面會給你一個簡單的比例適用於您的GROUPBY對象:
countrypat.apply(lambda x: x/float(x.sum()))
唯一的問題是這樣做會給你一個系列,所以我會將中間結果存儲在兩個不同的系列中,並在最後結合它們:
series1 = asiaselect.groupby('Country')['Pattern'].value_counts()
series2 = asiaselect.groupby('Country')['Pattern'].value_counts().groupby(level=0).apply(lambda x: x/float(x.sum()))
pd.DataFrame([series1, series2]).T
China abc 1055.0 0.431493
def 778.0 0.318200
ghi 612.0 0.250307
Malaysia def 554.0 0.472293
abc 441.0 0.375959
ghi 178.0 0.151748
至於獲得前三名的行,你可以簡單地添加一個.groupby(level=0).head(3)
每個系列1和系列2
series1_top = series1.groupby(level=0).head(3)
series2_top = series2.groupby(level=0).head(3)
pd.DataFrame([series1_top, series2_top]).T
我用含有超過3行的數據幀進行測試,它似乎工作。入門以下DF:
China abc 1055
def 778
ghi 612
yyy 5
xxx 3
zzz 3
Malaysia def 554
abc 441
ghi 178
yyy 5
xxx 3
zzz 3
結束這樣的:
China abc 1055.0 0.429560
def 778.0 0.316775
ghi 612.0 0.249186
Malaysia def 554.0 0.467905
abc 441.0 0.372466
ghi 178.0 0.150338
比方說,每個國家有,例如,10行。如何獲得每個國家的頭(3)? –
你的意思是你只希望根據3個最高數字的總和來計算比例? (head(3)) –
假設我在每個國家有10行,比例總和爲1.如何報告每個國家的前3行,理解比率不會等於1? (使用所有行來計算比率,但只是將輸出過濾到領導者)? –