web-dev-qa-db-ja.com

結合pandas列値に基づくデータフレーム

私はpandas dataframesにかなり慣れていないので、2つのテーブルを結合する際にいくつかの問題を経験しています。

最初のdfには3列しかありません。

DF1:
item_id    position    document_id
336        1           10
337        2           10
338        3           10
1001       1           11
1002       2           11
1003       3           11
38         10          146

2番目の列にはまったく同じ2つの列があります(他の列もたくさんあります)。

DF2
item_id    document_id    col1    col2   col3    ...
337        10             ...     ...    ...
1002       11             ...     ...    ...
1003       11             ...     ...    ...

必要なのは、SQLで次のように見える操作を実行することです。

DF1 join DF2 on 
DF1.document_id = DF2.document_id
and
DF1.item_id = DF2.item_id

そして、結果として、列 'position'で補完されたDF2を見たいです:

item_id    document_id    position    col1   col2   col3   ...

パンダを使用してこれを行う良い方法は何ですか?

ありがとうございました!

8
fremorie

デフォルトのmerge結合で inner が必要だと思いますが、両方の列の値の重複した組み合わせは必要ありません。

print (df2)
   item_id  document_id col1  col2  col3
0      337           10    s     4     7
1     1002           11    d     5     8
2     1003           11    f     7     0

df = pd.merge(df1, df2, on=['document_id','item_id'])
print (df)
   item_id  position  document_id col1  col2  col3
0      337         2           10    s     4     7
1     1002         2           11    d     5     8
2     1003         3           11    f     7     0

ただし、必要に応じて、position列の位置3

df = pd.merge(df2, df1, on=['document_id','item_id'])
cols = df.columns.tolist()
df = df[cols[:2] + cols[-1:] + cols[2:-1]]
print (df)
   item_id  document_id  position col1  col2  col3
0      337           10         2    s     4     7
1     1002           11         2    d     5     8
2     1003           11         3    f     7     0
16
jezrael