質問: 問題 == 以下のようなデータフレームがあります。 ![画像の説明をここに入力](https://i.stack.imgur.com/2jn89.jpg) 都道府県名(47都道府県)と市区町村名(618種類)、面積がカラムになっております。 このDataFrameに対して、 都道府県名が`北海道`の行に対して、市区町村ごとに面積の平均を求めたいです。 そこで以下のようなコードを実行したところ ``` # 都道府県ごとに面積当たりの価格の平均が高いところを調べたい df[df["都道府県名"]=="北海道"].groupby('市区町村名').mean() ``` 以下のような結果が出力されます。 ![画像の説明をここに入力](https://i.stack.imgur.com/oD2Ut.jpg) 北海道だけ抽出したのにも関わらず、なぜかほかの県の市区町村が残っており、平均値が計算されています。 この現象の原因がわからずこまっています。 わかる方ぜひとも教えてください。 追記 SwarmPlotを試してみても以下のようにxが各都道府県になってしまいます。 都道府県名には北海道のみなのですが、なぜでしょうか ![画像の説明をここに入力](https://i.stack.imgur.com/xuaFw.jpg) 追記2 北海道に対応する市区町村名の数を数えたところ、やはり正しいようです。 そして、categoryという欄になぜかすべての市区町村名が載っています。 ![画像の説明をここに入力](https://i.stack.imgur.com/xUkuJ.jpg)
回答: コメントにも書きましたが、以下の承認された回答にある通りです。 Pandas groupby with categories with redundant nan > > Since Pandas 0.23.0, the groupby method can now take a parameter observed which fixes this issue if it is set to True (False by default). Below is the exact same code as in the question with just **observed=True** added: > > > pandas.DataFrame.groupby — pandas 1.2.4 documentation > > **observed: bool, default False** > > > This only applies if any of the groupers are Categoricals. If True: only show observed values for categorical groupers. **If False: show all values for categorical groupers**. > > >