13

次のように、有名な Titanic データセットを含む DataFrame を要約するコードがいくつかあります。

titanic['agecat'] = pd.cut(titanic.age, [0, 13, 20, 64, 100], 
               labels=['child', 'adolescent', 'adult', 'senior'])
titanic.groupby(['agecat', 'pclass','sex']
                )['survived'].mean()

これにより、呼び出しに基づいて MultiIndex を持つ次の DataFrame が生成されgroupbyます。

agecat      pclass  sex   
adolescent  1       female    1.000000
                    male      0.200000
            2       female    0.923077
                    male      0.117647
            3       female    0.542857
                    male      0.125000
adult       1       female    0.965517
                    male      0.343284
            2       female    0.868421
                    male      0.078125
            3       female    0.441860
                    male      0.159184
child       1       female    0.000000
                    male      1.000000
            2       female    1.000000
                    male      1.000000
            3       female    0.483871
                    male      0.324324
senior      1       female    1.000000
                    male      0.142857
            2       male      0.000000
            3       male      0.000000
Name: survived, dtype: float64

ただし、agecatMultiIndex のレベルを、アルファベット順ではなく、自然に並べる必要があります['child', 'adolescent', 'adult', 'senior']。ただし、これを使用しようとするreindexと:

titanic.groupby(['agecat', 'pclass','sex'])['survived'].mean().reindex(
    ['child', 'adolescent', 'adult', 'senior'], level='agecat')

結果の DataFrame の MultiIndex には影響しません。これは機能するはずですか、それとも間違ったアプローチを使用していますか?

4

1 に答える 1