前提・実現したいこと
import pandas as pd import numpy as np df = pd.DataFrame(data=np.arange(24).reshape(4, 6)) df.columns = pd.MultiIndex.from_product([['A', 'B'], ['a', 'b', 'c']]) display(df)
1 ----------------- A | B ----------------- a b c | a b c -----------------
のようなインデックスを実現したいのですが、上手くできません。
※ 実コードは前提が長いため、サンプルで書かせていただきました。
試したこと①
df.columns = pd.MultiIndex.from_product([['1'], df.columns]) diplay(df)
で書こうとしましたが、
--------------------------------------------------------------------------- NotImplementedError Traceback (most recent call last) <ipython-input-5-3f8355c6b72e> in <module>() ----> 1 df.columns = pd.MultiIndex.from_product([['1'], df.columns]) 2 diplay(df) 11 frames pandas/_libs/properties.pyx in pandas._libs.properties.CachedProperty.__get__() pandas/_libs/properties.pyx in pandas._libs.properties.CachedProperty.__get__() /usr/local/lib/python3.7/dist-packages/pandas/core/dtypes/missing.py in _isna(obj, inf_as_na) 151 # hack (for now) because MI registers as ndarray 152 elif isinstance(obj, ABCMultiIndex): --> 153 raise NotImplementedError("isna is not defined for MultiIndex") 154 elif isinstance(obj, type): 155 return False NotImplementedError: isna is not defined for MultiIndex
というエラーが発生して、上手くいきませんでした。
試したこと②
df.columns = pd.MultiIndex.from_tuples(zip(['1'] * len(df.columns), df.columns)) display(df)
も試してみましたが、
となり、実現したい結果とは異なりました。
試したこと③
df.columns = pd.MultiIndex.from_tuples([("1", i, j) for i in ['A', 'B'] for j in ['a', 'b', 'c']]) display(df)
は、このサンプルでは上手くいくのですが、
実コードでは、リスト内の順番を正しく反映できず
(そもそも外部ソースから抽出するデータのため、コードの切れ目で元の列インデックスのリストを出力させた上で、
全部を目で確認した上でリストを再現するのは難しいです)、
その後の分析で正しい数値を出力することができませんでした。
補足情報(FW/ツールのバージョンなど)
python3
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/17 14:42