web-dev-qa-db-ja.com

pandasでgroupbyを使用して、別の列の基準に基づいてパーセンテージ/比率の合計を計算する方法

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%とします。

誰でもこれを行う方法をアドバイスできますか?

8
fuzzy_logic_77

この質問は 推奨される重複 を直接拡張したものです。受け入れられた答えを借りて、これはうまくいきます:

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')
23
IanS