Python Pandaları yalnızca belirli sütunları birleştirir


110

Sadece bazı sütunları birleştirmek mümkün mü? X, a, b, c, d, e, f vb. Sütunları olan x, y, z ve df2 sütunlarına sahip bir DataFrame df1'im var.

İki DataFrame'i x üzerinde birleştirmek istiyorum, ancak yalnızca df2.a, df2.b sütunlarını birleştirmek istiyorum - tüm DataFrame'i değil.

Sonuç, x, y, z, a, b içeren bir DataFrame olacaktır.

İstenmeyen sütunları birleştirip silebilirim, ancak daha iyi bir yöntem var gibi görünüyor.


1
Andy: Kutsal inek bu kolaydı ... Ara vermem gerekiyor, belli ki bunu çok karmaşık hale getiriyorum. Açıklık için teşekkürler!
Bubble Guppies

Yanıtlar:


81

Alt DataFrame'i (yalnızca bu sütunlarla) birleştirebilirsiniz:

df2[list('xab')]  # df2 but only with columns x, a, and b

df1.merge(df2[list('xab')])

6
Orada ... dropna içinde alt kümesi gibi bunun için bir yerli bir yol olmalıdır araya github konuyu koyacağız eğer Hmmm acaba
Andy Hayden

Hmmm ... Bunu, 'Unique_External_Users' sütununu df2'den df1'e birleştirmek için kullanmayı denedim, ancak bir hata aldım ... "[Index (['U', 'n', 'i', 'q', 'u') ',' e ',' ',' E ',' x ',' t ',' e ',' r ',' n ',' a ', \ n' l ',' ',' U ', 's', 'e', ​​'r', 's'], \ n dtype = 'nesne')] [sütunlarda] ".
CoolDocMan

İşte kod. ... df1.merge (df2 ('Unique_External_Users')])
CoolDocMan

1
@CoolDocMan Önerilen cevaptan bir şeyi kaçırdığınızı düşünüyorum: list('xab')'xab' dizesinin her bir elemanını (harfini) alır ve onu bir liste elemanına dönüştürür, böylece list('xab')geri döner ['x', 'a', 'b']. Bu, her sütunun adı tek bir harf içeriyorsa işe yarar. Sizin durumunuzda, df1.merge (df2 ['Unique_External_Users'], * other_arguments) yapmanız gerektiğini düşünüyorum. ... Büyük olasılıkla şimdiye kadar zaten çözdünüz, bunu benim gibi yeni başlayanlar için bırakıyorsunuz
SOf_PUAR

114

İKİ parantez kullanmak istiyorsunuz, bu nedenle DÜŞEYARA türü eylem yapıyorsanız:

df = pd.merge(df,df2[['Key_Column','Target_Column']],on='Key_Column', how='left')

Bu size orijinal df + 'daki her şeyi verir, df2'de katılmak istediğiniz ilgili sütunu ekler.


12

Hedef veri çerçevesinden sütun (lar) bırakmak istiyorsanız, ancak birleştirme için sütun (lar) gerekliyse, aşağıdakileri yapabilirsiniz:

df1 = df1.merge(df2[['a', 'b', 'key1']], how = 'left',
                left_on = 'key2', right_on = 'key1').drop('key1')

.drop('key1')İlk etapta katılmak için gerekli olmasına rağmen bir parçası, elde edilen veri çerçevesi içinde olması 'key1 dizesini' önleyecektir.


5
Bunu KeyError: "['key1'] not found in axis"
denersem

3
deneyin .drop (sütunlar = ['key1'])
psangam

Veya .drop ('key1', axis = 1)
tonneofash

8

Sen kullanabilirsiniz .loctüm satırlarla belirli sütunları seçmek için ve daha sonra bu çekin. Bir örnek aşağıdadır:

pandas.merge(dataframe1, dataframe2.iloc[:, [0:5]], how='left', on='key')

Bu örnekte, dataframe1 ve dataframe2'yi birleştiriyorsunuz. "Anahtar" üzerinde bir dış sol birleşim yapmayı seçtiniz. Bununla birlikte, dataframe2 için .iloc, istediğiniz satırları ve sütunları sayısal bir formatta belirlemenize izin veren belirlediniz . Kullanarak :, tüm satırları seçersiniz, ancak [0:5]ilk 5 sütunu seçer. Sen kullanabilirsiniz .locadıyla belirtmek için, ama senin uzun sütun adları ile uğraşan, o zaman .ilocdaha iyi olabilir.


1
.locBunun bir kopya oluşturacağına ve acı verebilecek büyük bir df'ye dikkat edin . Aynı ifadede birleştirip hemen bir sütun dilimi almak daha iyi olabilir.
smci

7

Bu, iki tablodan seçilen sütunları birleştirmek içindir.

Eğer table_1içeren t1_a,t1_b,t1_c..,id,..t1_zsütunlar ve table_2içerdiği t2_a, t2_b, t2_c..., id,..t2_zsonra, sütunları ve yalnızca t1_a, id, t2_a final masasına gereklidir

mergedCSV = table_1[['t1_a','id']].merge(table_2[['t2_a','id']], on = 'id',how = 'left')
# save resulting output file    
mergedCSV.to_csv('output.csv',index = False)
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.