pandasのgroupby
関数を使用して、特定のはい/いいえの基準で1年あたりの値の比率を計算する方法を考えています。
たとえば、names
というデータフレームがあります。
Name Number Year Sex Criteria
0 name1 789 1998 Male N
1 name1 688 1999 Male N
2 name1 639 2000 Male N
3 name2 551 1998 Male Y
4 name2 499 1999 Male Y
使うことができます
namesgrouped = names.groupby(["Sex", "Year", "Criteria"]).sum()
取得するため:
Number
Sex Year Criteria
Male 1998 N 14507
Y 2308
1999 N 14119
Y 2331
等々。 「数値基準」列に性別と年ごとの合計の%を表示したいので、上記の1998年のN = 14507およびY = 2308の代わりに、N = 86.27%およびY = 13.73%とします。
誰でもこれを行う方法をアドバイスできますか?
この質問は 推奨される重複 を直接拡張したものです。受け入れられた答えを借りて、これはうまくいきます:
In [46]: namesgrouped.groupby(level=[0, 1]).apply(lambda g: g / g.sum())
Out[46]:
Number
Sex Year Criteria
Male 1998 N 0.588806
Y 0.411194
1999 N 0.579612
Y 0.420388
2000 N 1.000000
Edit:変換操作は適用よりも高速な場合があります。
namesgrouped / namesgrouped.groupby(level=[0, 1]).transform('sum')