web-dev-qa-db-ja.com

Python-VLOOKUP(Excel)と同様の機能

2つのデータフレームを結合しようとしていますが、可能性について頭を悩ませることはできませんPythonが提供する必要があります。

最初のデータフレーム:

ID MODEL   REQUESTS ORDERS
1  Golf    123      4
2  Passat  34       5
3  Model 3 500      8
4  M3      5        0

2番目のデータフレーム:

MODEL   TYPE  MAKE
Golf    Sedan Volkswagen
M3      Coupe BMW
Model 3 Sedan Tesla

私が欲しいのは、「make」という最初のデータフレームに別の列を追加して、次のようにすることです。

ID MODEL   MAKE       REQUESTS ORDERS
1  Golf    Volkswagen 123      4
2  Passat  Volkswagen 34       5
3  Model 3 Tesla      500      8
4  M3      BMW        5        0

マージ、結合、およびマップについては既に見てきましたが、すべての例で必要な情報がデータフレームの最後に追加されています。

9
Christian

insert with map by Series by df2(ある値の場合) df2の列MODELにget NaNがありません:

df1.insert(2, 'MAKE', df1['MODEL'].map(df2.set_index('MODEL')['MAKE']))
print (df1)
   ID    MODEL        MAKE  REQUESTS  ORDERS
0   1     Golf  Volkswagen       123       4
1   2   Passat         NaN        34       5
2   3  Model 3       Tesla       500       8
3   4       M3         BMW         5       0
10
jezrael

この場合はそうではありませんが、df2に3つ以上の列があり、特定の列をキーとしてそれらの1つをdf1に追加したい場合があります。役に立つと思われる一般的なコードを次に示します。

df = pd.merge(df1, df2[['MODEL', 'MAKE']], on = 'MODEL', how = 'left')
1
Bhagabat Behera

joinメソッドは、VLOOKUPと非常によく似た動作をします。最初のデータフレームの列を2番目のデータフレームのインデックスと結合するため、2番目のデータフレームのインデックスとしてMODELを設定し、MAKEカラムのみを取得する必要があります。

df.join(df1.set_index('MODEL')['MAKE'], on='MODEL')

実際にWord VLOOKUPを使用している joinのドキュメント を見てください。

1
Ted Petrou

私はいつもマージがこれを行う簡単な方法だと思っていました:

df1.merge(df2[['MODEL', 'MAKE']], how = 'left')

ただし、新しい列を「MAKE」以外の名前にしたい場合は、短くてニースではないことを認めなければなりません。

1
Yona