pandasでマルチインデックスデータフレームとシングルインデックスデータフレームをマージする 質問する

pandasでマルチインデックスデータフレームとシングルインデックスデータフレームをマージする 質問する

2 つのデータフレームがあります。df1 はマルチインデックスです。

                value
first second    
a     x         0.471780
      y         0.774908
      z         0.563634
b     x         -0.353756
      y         0.368062
      z         -1.721840

そしてdf2:

      value
first   
a     10
b     20

マルチインデックスの 1 つだけ (この場合は「最初の」インデックス) を使用して 2 つのデータ フレームをマージするにはどうすればよいですか? 望ましい出力は次のようになります。

                value1      value2
first second    
a     x         0.471780    10
      y         0.774908    10
      z         0.563634    10
b     x         -0.353756   20
      y         0.368062    20
      z         -1.721840   20

ベストアンサー1

使用できるget_level_values:

firsts = df1.index.get_level_values('first')
df1['value2'] = df2.loc[firsts].values

注: あなたはほとんどやっているjoinここでは (df1 は MultiIndex であることを除いて)...したがって、これを説明するよりきれいな方法があるかもしれません...

例(あなたの例に似ています):

df1 = pd.DataFrame([['a', 'x', 0.123], ['a','x', 0.234],
                    ['a', 'y', 0.451], ['b', 'x', 0.453]],
                   columns=['first', 'second', 'value1']
                   ).set_index(['first', 'second'])
df2 = pd.DataFrame([['a', 10],['b', 20]],
                   columns=['first', 'value']).set_index(['first'])

firsts = df1.index.get_level_values('first')
df1['value2'] = df2.loc[firsts].values

In [5]: df1
Out[5]: 
              value1  value2
first second                
a     x        0.123      10
      x        0.234      10
      y        0.451      10
b     x        0.453      20

おすすめ記事