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