[英]how to calculate percentage for particular rows for given columns using python pandas?
[英]How to calculate a percentage using grouped columns in Pandas python?
熊貓新手,遇到一個我不知道的簡單問題。
我在美國有一個嬰兒名字的數據集,看起來像這樣:
我正在嘗試編寫一個程序,可以在其中輸入名稱列表,並獲取該名稱是男性還是女性的百分比可能性(當前年份與我的目的無關)
我寫了groupby,然后將男性和女性的名字計數加在一起。
現在,我所需要做的就是根據此數據計算百分比。 我認為這是某種transform
(對嗎?),但是我似乎無法編寫任何有效的方法。 我知道我將如何在SQL中執行此操作,但我確實在嘗試弄清楚Pandas。 一些指針將不勝感激!
謝謝!
如果我正確理解了您要查找的內容,那么我會先用零填充缺失的值,即n.fillna(0)
。 然后計算百分比,並將結果分配到新列。 女性比例:
n['%F'] = n[('Count', 'F')] / n['sum'] * 100
甚至在執行總和之前,您都需要這樣做:
n.apply(lambda x: x / x.sum(), axis=1)
在各列中看起來像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'])
因此,首先通過使用切片器選擇列F
和M
然后將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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.