2016-05-08 61 views
0

熊貓新手,遇到一個簡單的問題,我無法弄清楚。如何使用Pandas python中的分組列來計算百分比?

我有寶寶的名字在美國的數據集是這樣的:

orig data

我試圖寫一個程序,我可以在名稱的列表,飼料和找回%名字是男性或女性的可能性(這一年與我目前的目的無關)

我寫了一個groupby,然後將男性和女性的名字統計在一起。

groupby data

現在我需要的是calc下基於此數據的百分比。我認爲這是某種transform(對吧?),但我似乎無法寫出任何有效的東西。我知道我是怎麼用SQL來做的,但我真的想弄明白熊貓。一些指針將不勝感激!

謝謝!

+0

如果你知道你會怎麼做這在SQL中的大熊貓[文件]那麼也許這部分(http://pandas.pydata.org/pandas- docs/version/0.18.1/comparison_with_sql.html)將有所幫助。 – pbreach

回答

1

如果我正確理解了您要找的內容,我會先用零填充缺失的值,即n.fillna(0)。然後計算百分比並將結果分配到新列。對於女性百分比:

n['%F'] = n[('Count', 'F')]/n['sum'] * 100 
0

即使之前您做過的總和,你可以這樣做:

n.apply(lambda x: x/x.sum(), axis=1) 
0

它看起來像Multiindex列:

print n.columns 
MultiIndex(levels=[[u'Count', u'sum'], [u'', u'F', u'M']], 
      labels=[[0, 0, 1], [1, 2, 0]], 
      names=[None, u'Gender']) 

所以首先選擇列FMusing-slicers。 然後fillna通過0除以sum柱:

idx = pd.IndexSlice 
F = n.loc[:, idx['Count','F']] 
M = n.loc[:, idx['Count','M']] 
sum = n.loc[:, idx['sum','']] 

n['%F'] = F.fillna(0)/sum * 100 
n['%M'] = M.fillna(0)/sum * 100 
print n 

       Count      sum   %F   %M 
Gender    F   M          
Name                 
Aaban   NaN 10.285710 10.285710 0.000000 100.000000 
Aabfla  7.000000   NaN 7.000000 100.000000 0.000000 
Aabid   NaN 5.000000 5.000000 0.000000 100.000000 
Aabrielle 5.000000   NaN 5.000000 100.000000 0.000000 
Aadarn   NaN 8.521739 8.521739 0.000000 100.000000 
Aadan   NaN 12.000000 12.000000 0.000000 100.000000 
Aadar   NaN 11.285710 11.285710 0.000000 100.000000 
Aaden  5.000000 279.002857 284.002857 1.760546 98.239454 
Aade    NaN 5.000000 5.000000 0.000000 100.000000 
Aadhav   NaN 12.750000 12.750000 0.000000 100.000000 
Aadhavan   NaN 6.333333 6.333333 0.000000 100.000000 
Aadhi   NaN 6.000000 6.000000 0.000000 100.000000 
Aadhira  0.888857   NaN 9.000007 9.876181 0.000000 
Aadhve  79.875000   NaN 79.875000 100.000000 0.000000 
Aadhven   NaN 5.000000 5.000000 0.000000 100.000000 
Aadi  5.333333 55.583333 60.910007 8.756087 91.254846 
Aadian   NaN 5.000000 5.000000 0.000000 100.000000 
Aadil   NaN 12.913003 12.913003 0.000000 100.000000 
Aadin   NaN 12.000000 12.000000 0.000000 100.000000 
+0

我真的希望OP不會像這樣在multiindex中加載......看起來很痛苦。 – pbreach