web-dev-qa-db-ja.com

パンダ:マルチインデックスデータフレームでインデックスタイプを変換する

こんにちは、マルチインデックスデータフレームがあります:

tuples = [('YTA_Q3', 1), ('YTA_Q3', 2), ('YTA_Q3', 3), ('YTA_Q3', 4), ('YTA_Q3', 99), ('YTA_Q3', 96)]
# Index
index = pd.MultiIndex.from_tuples(tuples, names=['Questions', 'Values'])
# Columns
columns = pd.MultiIndex.from_tuples([('YTA_Q3', '@')], names=['Questions', 'Values'])
# Data
data = [29.014949,5.0260590000000001,
  6.6269119999999999,
  1.3565260000000001,
  41.632221999999999,
  21.279499999999999]

df1 = pd.DataFrame(data=data, index=index, columns=columns)

Dfのインデックスの内部値をstrに変換するにはどうすればよいですか?

私の試み:

df1.index.astype(str) 

typeErrorを返します

14
Boosted_d16

IIUCには、最後のレベルのマルチインデックスが必要です。 levelsでアクセスできます。

df1.index.levels[-1].astype(str)

In [584]: df1.index.levels[-1].astype(str)
Out[584]: Index(['1', '2', '3', '4', '96', '99'], dtype='object', name='Values')

[〜#〜]編集[〜#〜]

MultiIndexのset_levelsメソッドを使用して内部レベルを設定できます。

idx = df1.index
df1.index = df1.index.set_levels([idx.levels[:-1], idx.levels[-1].astype(str)])
17

現在のpandasの実装は少し面倒なので、これを使用します。

df1.index = pd.MultiIndex.from_tuples([(ix[0], str(ix[1])) for ix in df1.index.tolist()])

1
FuzzyDuck