web-dev-qa-db-ja.com

2つのMultiIndexレベルを1つにマージPandas

Pandas MultiIndexedであるデータフレームがあります。2番目のレベルには年([2014,2015])が含まれ、3番目のレベルには月番号([1、2、..、12]が含まれます) )。これら2つを-[1/2014、2/2014 ...、6/2015]のような単一のレベルにマージしたいと思います。これはどのように行うことができますか?

私はパンダに不慣れです。たくさん検索しましたが、同様の質問/解決策は見つかりませんでした。

編集: この質問 への回答と一緒にこれを行う必要がないようにする方法を見つけました。そのようにデータフレームを作成する必要がありました。これは、DateTimeによるインデックス作成の方法のようです。

11
Anmol Singh

考えます pd.MultiIndexおよびpd.DataFramemuxおよびdf

mux = pd.MultiIndex.from_product([list('ab'), [2014, 2015], range(1, 3)])

df = pd.DataFrame(dict(A=1), mux)

print(df)

          A
a 2014 1  1
       2  1
  2015 1  1
       2  1
b 2014 1  1
       2  1
  2015 1  1
       2  1

必要なインデックスを表すリストがある場合は、インデックスにリストを再割り当てします。

  • 1レベルも同じにしたい

    df.index.get_level_values(0)
    
  • 新しい2番目のレベルを現在の2番目と3番目のレベルの文字列連結にしたいが、順序を逆にしたい

    df.index.map('{0[2]}/{0[1]}'.format)
    

df.index = [df.index.get_level_values(0), df.index.map('{0[2]}/{0[1]}'.format)]

print(df)

          A
a 1/2014  1
  2/2014  1
  1/2015  1
  2/2015  1
b 1/2014  1
  2/2014  1
  1/2015  1
  2/2015  1
13
piRSquared