実現したいこと
Pandasの階層型インデックスでカラムも複数の場合のカラム(列)方向に合計したい。
発生している問題・分からないこと
DataFrameの階層型インデックスでインデックス(行)方向の合計はhier_df.groupby(level = "key2").sum()で出せたが、カラム(列)方向のhier_df.groupby(level = "color").sum()で出せない。
エラーメッセージ
error
1--------------------------------------------------------------------------- 2ValueError Traceback (most recent call last) 3File ~\anaconda3\Lib\site-packages\pandas\core\indexes\multi.py:1664, in MultiIndex._get_level_number(self, level) 4 1663 try: 5-> 1664 level = self.names.index(level) 6 1665 except ValueError as err: 7 8ValueError: 'color' is not in list 9 10The above exception was the direct cause of the following exception: 11 12KeyError Traceback (most recent call last) 13Cell In[32], line 1 14----> 1 hier_df.groupby(level = "color", as_index=False).sum() 15 16File ~\anaconda3\Lib\site-packages\pandas\core\frame.py:9183, in DataFrame.groupby(self, by, axis, level, as_index, sort, group_keys, observed, dropna) 17 9180 if level is None and by is None: 18 9181 raise TypeError("You have to supply one of 'by' and 'level'") 19-> 9183 return DataFrameGroupBy( 20 9184 obj=self, 21 9185 keys=by, 22 9186 axis=axis, 23 9187 level=level, 24 9188 as_index=as_index, 25 9189 sort=sort, 26 9190 group_keys=group_keys, 27 9191 observed=observed, 28 9192 dropna=dropna, 29 9193 ) 30 31File ~\anaconda3\Lib\site-packages\pandas\core\groupby\groupby.py:1329, in GroupBy.__init__(self, obj, keys, axis, level, grouper, exclusions, selection, as_index, sort, group_keys, observed, dropna) 32 1326 self.dropna = dropna 33 1328 if grouper is None: 34-> 1329 grouper, exclusions, obj = get_grouper( 35 1330 obj, 36 1331 keys, 37 1332 axis=axis, 38 1333 level=level, 39 1334 sort=sort, 40 1335 observed=False if observed is lib.no_default else observed, 41 1336 dropna=self.dropna, 42 1337 ) 43 1339 if observed is lib.no_default: 44 1340 if any(ping._passed_categorical for ping in grouper.groupings): 45 46File ~\anaconda3\Lib\site-packages\pandas\core\groupby\grouper.py:897, in get_grouper(obj, key, axis, level, sort, observed, validate, dropna) 47 893 level = level[0] 48 895 if key is None and is_scalar(level): 49 896 # Get the level values from group_axis 50--> 897 key = group_axis.get_level_values(level) 51 898 level = None 52 900 else: 53 901 # allow level to be a length-one list-like object 54 902 # (e.g., level=[0]) 55 903 # GH 13901 56 57File ~\anaconda3\Lib\site-packages\pandas\core\indexes\multi.py:1832, in MultiIndex.get_level_values(self, level) 58 1784 def get_level_values(self, level) -> Index: # type: ignore[override] 59 1785 """ 60 1786 Return vector of label values for requested level. 61 1787 62 (...) 63 1830 Index([1.0, nan, 2.0], dtype='float64') 64 1831 """ 65-> 1832 level = self._get_level_number(level) 66 1833 values = self._get_level_values(level) 67 1834 return values 68 69File ~\anaconda3\Lib\site-packages\pandas\core\indexes\multi.py:1667, in MultiIndex._get_level_number(self, level) 70 1665 except ValueError as err: 71 1666 if not is_integer(level): 72-> 1667 raise KeyError(f"Level {level} not found") from err 73 1668 if level < 0: 74 1669 level += self.nlevels 75 76KeyError: 'Level color not found'
該当のソースコード
hier_df.groupby(level = "color").sum()
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
as_index=Falsを使うなど試してみましたが、どれもエラーが出てしまいます。
補足
特になし
※ 回答へ転記
回答1件
あなたの回答
tips
プレビュー