2017-04-26 45 views
1

我得到一個熊貓系列:插入比率場成熊貓系列

countrypat = asiaselect.groupby('Country')['Pattern'].value_counts().groupby(level=0).head(3) 

輸出看起來是這樣的:

China  abc    1055 
      def     778 
      ghi     612 
Malaysia def     554 
      abc     441 
      ghi     178 
[...] 

如何插入新列(做我必須做這個數據框),其中包含數字列與該國家數字之和的比率。因此,對於中國我想要一個新的專欄,第一行將包含(1055 /(1055 + 778 + 612))。我試過了unstack()和to_df(),但不確定下一步要做什麼。

回答

1

我創建了我的身邊一個數據幀,但排除了您的分配新建分配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 
+0

比方說,每個國家有,例如,10行。如何獲得每個國家的頭(3)? –

+0

你的意思是你只希望根據3個最高數字的總和來計算比例? (head(3)) –

+0

假設我在每個國家有10行,比例總和爲1.如何報告每個國家的前3行,理解比率不會等於1? (使用所有行來計算比率,但只是將輸出過濾到領導者)? –