Пандони Python об'єднують лише певні стовпці


109

Чи можливо лише об'єднати деякі стовпці? У мене є DataFrame df1 зі стовпцями x, y, z та df2 зі стовпцями x, a, b, c, d, e, f тощо.

Я хочу об'єднати два DataFrames на x, але я хочу лише об'єднати стовпці df2.a, df2.b - не весь DataFrame.

У результаті вийде DataFrame з x, y, z, a, b.

Я міг би об'єднати потім видалити небажані стовпці, але, схоже, є кращий метод.


1
Енді: Свята корова, що було легко ... Мені потрібна перерва, я, очевидно, ускладнюю це. Дякую за ясність!
BubbleGuppies

Відповіді:


81

Ви можете об'єднати суб-DataFrame (із лише тими стовпцями):

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

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

6
Гммм, мені цікаво, чи повинен бути рідний спосіб зробити це, як підмножина в дропне ... зібрати випуск github
Енді Хайден,

Гммм ... я спробував використати це для об'єднання стовпця "Unique_External_Users" з df2 в df1, але отримав помилку ... "Немає з [Index (['U', 'n', 'i', 'q', 'u ',' e ',' ',' E ',' x ',' t ',' e ',' r ',' n ',' a ', \ n' l ',' ',' U ', 's', 'e', ​​'r', 's'], \ n dtype = 'object')] знаходяться у [стовпцях] ".
CoolDocMan

Ось код. ... df1.merge (df2 ('Unique_External_Users')])
CoolDocMan

1
@CoolDocMan Я думаю, що ви щось пропустили із запропонованої відповіді: list('xab')бере кожен елемент (літеру) рядка 'xab' і перетворює його в елемент списку, так що list('xab')повертається ['x', 'a', 'b']. Це працює, якщо в кожному стовпчику є одна літера як назва. У вашому випадку я думаю, що вам потрібно зробити df1.merge (df2 ['Unique_External_Users'], * other_arguments). ... Швидше за все, ви вже вирішили це, просто залишивши це для новачків навколо, як я
SOf_PUAR

114

Ви хочете використовувати ДВА дужки, тож якщо ви робите дії VLOOKUP:

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

Це дасть вам усе в оригінальному df + додати той відповідний стовпець у df2, до якого ви хочете приєднатися.


11

Якщо ви хочете скинути стовпці з цільового кадру даних, але стовпець (и) необхідний для з'єднання, ви можете зробити наступне:

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

.drop('key1')Частина буде перешкоджати «key1» від тримають в одержуваному кадрі даних, незважаючи на його потрібно , щоб приєднатися в першу чергу.


4
Якщо я спробую це, я отримую таку помилку:KeyError: "['key1'] not found in axis"
Таня Бранаган

3
спробуйте .drop (колонки = ['key1'])
psangam

Або .drop ('key1', ось = 1)
tonneofash

8

Ви можете .locвибрати конкретні стовпці з усіма рядками, а потім витягнути їх. Приклад наведено нижче:

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

У цьому прикладі ви об'єднуєте dataframe1 та dataframe2. Ви вирішили зробити зовнішнє ліве з'єднання на "клавіші". Однак для dataframe2 ви вказали, .ilocщо дозволяє вказувати потрібні рядки та стовпці у цифровому форматі. Використовуючи :, [0:5]вибираєте всі рядки, але вибираєте перші 5 стовпців. Ви можете використовувати, .locщоб вказати ім’я, але якщо ви маєте справу з довгими назвами стовпців, то, .ilocможливо, буде краще.


1
Остерігайтеся, що .locбуде зроблена копія , і на великому df, що може бути боляче. Можливо, буде краще злитись, а потім відразу взяти фрагмент стовпця в тому ж виразі.
smci

7

Це для об’єднання вибраних стовпців із двох таблиць.

Якщо table_1містять t1_a,t1_b,t1_c..,id,..t1_zстовпці та table_2містять t2_a, t2_b, t2_c..., id,..t2_zстовпці, а у фінальній таблиці потрібні лише t1_a, id, t2_a,

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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.