pandalar: iki veri çerçevesini birden çok sütunda birleştir (birleştir)


169

İki sütun kullanarak iki panda veri çerçeveleri katılmaya çalışıyorum:

new_df = pd.merge(A_df, B_df,  how='left', left_on='[A_c1,c2]', right_on = '[B_c1,c2]')

ancak aşağıdaki hatayı aldı:

pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4164)()

pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4028)()

pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13166)()

pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13120)()

KeyError: '[B_1, c2]'

Bunu yapmanın doğru yolu ne olmalı? Teşekkürler!


53
left_onve right_onlisteye benzeyen bir dize değil, bir dize listesi olmalıdır.
Kök

Yanıtlar:


313

Bunu dene

new_df = pd.merge(A_df, B_df,  how='left', left_on=['A_c1','c2'], right_on = ['B_c1','c2'])

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html

left_on: etiket veya liste veya sol DataFrame'de birleştirilecek dizi benzeri Alan adları. Belirli bir vektörü sütunlar yerine birleştirme anahtarı olarak kullanmak için DataFrame uzunluğunda bir vektör veya vektör listesi olabilir

right_on: etiket veya liste veya dizi benzeri Alan adları sağ DataFrame'e veya sol_on dokümanlar başına vektör / vektör listesi


8
Eğer left_onve right_onaynı ise ave bkullanabilir miyiz on = ['a', 'b']?
ahbon

4
Evet, bu tamamen geçerli.
user3065757

4

burada sorun, kesme işaretlerini kullanarak, aslında @Shijo belgelerinde belirtildiği gibi, işlev bir etiket veya liste bekliyor, ancak bir dize değil, geçirilen değeri bir dize olarak ayarlanmasıdır! Liste, hem sol hem de sağ veri çerçevesi için iletilen sütunların adlarının her birini içeriyorsa, her sütun adının ayrı ayrı kesme işaretleri içinde olması gerekir . Belirtilenlerle, bunun neden inccorect olduğunu anlayabiliriz:

new_df = pd.merge(A_df, B_df,  how='left', left_on='[A_c1,c2]', right_on = '[B_c1,c2]')

Ve bu işlevi kullanmanın doğru yolu:

new_df = pd.merge(A_df, B_df,  how='left', left_on=['A_c1','c2'], right_on = ['B_c1','c2'])

3

Bunu yapmanın başka bir yolu: new_df = A_df.merge(B_df, left_on=['A_c1','c2'], right_on = ['B_c1','c2'], how='left')

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.