
[code]

    import pandas as pd
    import numpy as np
    df1 = pd.DataFrame({'生物':['しろくま','ねこ','うさぎ','ラッコ','モモンガ','シーサー','オデ','鎧金','鎧銀'],
                        'カテゴリ':['戦闘員','戦闘員','戦闘員','戦闘員','戦闘員','戦闘員','外部有識者','管理者','管理者'],
                        'HP':[2,50,100,600,60,72,1000,1000,1000]})
    df1
    
[/code]

度々失礼します。  
pandas.dataFrameにおいて、集計した際の列名について質問させてください。  
上記のような df1 に対して、以下のように集計を行った場合の df2 の列名ですが、

[code]

    df2 = df1[['カテゴリ','HP']].groupby('カテゴリ').mean()
    df2.dtypes
    
[/code]

df2.dtypesを実行すると、結果にカテゴリ列が表示されず、HP列のみが表示されているのはなぜでしょうか。  
df2の結果を使って、グラフ表示を行いたいのですが、x軸に設定しようと考えているカテゴリ列を参照すると、エラーになってしまいます。

基本的な内容の質問で大変恐縮ですが、ご教示いただけますと幸いです。  
どうぞよろしくお願いいたします。


CC BY-SA 4.0
2022-10-12T06:11:20.317
91560
2023-06-04T00:04:05.460
54631
question
python pandas
pandas groupby で集計を行った列の列名


`.groupby('カテゴリ')` によって指定列がインデックスになったためです。

[code]

    df3 = df2.reset_index()   # インデックスを外した df2
    
    df2.reset_index().dtypes   # dtypes
    
[/code]

また, plotするなら `df2.index` の値を使うと可能

* * *

#### (追記) 検証

[code]

    In [2]: df2 = df1[['カテゴリ','HP']].groupby('カテゴリ').mean()
    
    In [3]: df2.dtypes
    Out[3]:
    HP    float64
    dtype: object
    
    In [4]: df2.columns
    Out[4]: Index(['HP'], dtype='object')
    
    In [5]: df2.index
    Out[5]: Index(['外部有識者', '戦闘員', '管理者'], dtype='object', name='カテゴリ')
    
    In [6]: df2.reset_index().dtypes
    Out[6]:
    カテゴリ     object
    HP      float64
    dtype: object
    
    In [7]: df3 = df2.reset_index()
    
    In [8]: df3.columns
    Out[8]: Index(['カテゴリ', 'HP'], dtype='object')
    
[/code]


CC BY-SA 4.0
2022-10-12T07:00:29.653
91561
2023-03-07T07:15:19.670
2023-03-07T07:15:19.670
43025
43025
91560
answer