pandas(または別のモジュール)には、複数のキーに基づく2つのテーブルのマージ(または結合)をサポートする関数がありますか?
たとえば、2つのテーブル(データフレーム)a
とb
があります。
>>> a
A B value1
1 1 23
1 2 34
2 1 2342
2 2 333
>>> b
A B value2
1 1 0.10
1 2 0.20
2 1 0.13
2 2 0.33
望ましい結果は次のとおりです。
A B value1 value2
1 1 23 0.10
1 2 34 0.20
2 1 2342 0.13
2 2 333 0.33
複数のキーでマージするには、リストのキーを _pd.merge
_ に渡すだけです。
_>>> pd.merge(a, b, on=['A', 'B'])
A B value1 value2
0 1 1 23 0.10
1 1 2 34 0.20
2 2 1 2342 0.13
3 2 2 333 0.33
_
実際、_pd.merge
_のデフォルトは、2つのデータフレームの列ラベルの共通部分を使用するため、pd.merge(a, b)
はこの場合も同様に機能します。
最新のpandasのドキュメントによると、 オン パラメータはフィールド名のラベルまたはリストを受け入れ、両方が両方のデータフレームにある必要があります。以下は、その使用のためのMWEです。
a = pd.DataFrame({'A':['0', '0', '1','1'],'B':['0', '1', '0','1'], 'v':True, False, False, True]})
b = pd.DataFrame({'A':['0', '0', '1','1'], 'B':['0', '1', '0','1'],'v':[False, True, True, True]})
result = pd.merge(a, b, on=['A','B'], how='inner', suffixes=['_and', '_or'])
>>> result
A B v_and v_or
0 0 0 True False
1 0 1 False True
2 1 0 False True
3 1 1 True True
on:結合するラベルまたはリストの列またはインデックスレベルの名前。これらは両方のデータフレームに存在する必要があります。 onがNoneで、インデックスをマージしない場合、これはデフォルトで両方のデータフレームの列の共通部分になります。
詳細については、最新の pd.merge ドキュメントを確認してください。