LoginSignup
0
0

列が`MultiIndex`であるDataFrameに対して、`rename`関数で列名をタプルで指定しても列名は変更されない

Posted at

環境

  • Python 3.11.2
  • pandas 2.0.2

列がMultiIndexであるDataFrameがあります。このDataFrameの列名を、pandas.DataFrame.rename関数で変えたいです。

In [303]: data = {("japan","male"):[1,2,3], ("japan","female"):[11,12,13], ("us","male"):[2,3,4]}

In [304]: df = pandas.DataFrame(data)

In [305]: df
Out[305]: 
  japan          us
   male female male
0     1     11    2
1     2     12    3
2     3     13    4

columnsにタプルで列を指定しても、列名は変更されませんでした。

# 列名は変更されない
In [310]: df.rename(columns={("us","male"):("US","MALE")})
Out[310]: 
  japan          us
   male female male
0     1     11    2
1     2     12    3
2     3     13    4

解決

タプルではなく文字列を指定する

タプルではなく文字列を指定すれば、各レベルの列名は変更できました。

In [308]: df.rename(columns={"japan":"JAPAN"})
Out[308]: 
  JAPAN          us
   male female male
0     1     11    2
1     2     12    3
2     3     13    4

In [309]: df.rename(columns={"male":"MALE"})
Out[309]: 
  japan          us
   MALE female MALE
0     1     11    2
1     2     12    3
2     3     13    4

columnsプロパティにMultiIndexを指定する

In [319]: df2.columns = pandas.MultiIndex.from_tuples([("japan","male"), ("japan","female"), ("US","MALE")])

In [320]: df2
Out[320]: 
  japan          US
   male female MALE
0     1     11    2
1     2     12    3
2     3     13    4
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0