web-dev-qa-db-ja.com

pandasの複数のキーに基づいて2つのデータフレームをマージします

pandas(または別のモジュール)には、複数のキーに基づく2つのテーブルのマージ(または結合)をサポートする関数がありますか?

たとえば、2つのテーブル(データフレーム)abがあります。

>>> 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
22
Surah Li

複数のキーでマージするには、リストのキーを _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)はこの場合も同様に機能します。

59
Alex Riley

最新の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 ドキュメントを確認してください。

2
Miguel Rueda