2016-03-01 2 views
1

Я пытаюсь выяснить, возможно ли объединение/объединение/объединение двух таблиц, а вместо «внешнего» я ​​хотел бы выбрать отдельные идентификаторы из второй таблицы с встроенными опциями панд.Таблицы слияния Pandas: только отдельные идентификаторы из второй таблицы

Прямо сейчас я делаю что-то вдоль линий и у меня есть ощущение, что мой код не очень элегантно:

a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['c', '8', '1']] 
b = [['a', '52', '49'], ['b', '23', '0.05'], ['x', '5', '0']] 
df1 = pd.DataFrame(a, columns=['id_col', 'two', 'three']) 
df2 = pd.DataFrame(b, columns=['id_col', 'two', 'three']) 


# remove df2 entries also in df1 
different_ids = set(df2.id_col).difference(set(df1.id_col)) 
df2 = df2[df2.id_col.isin(different_ids)] 
# merge data frames 
df_merged = pd.concat([df1,df2]) 

объединенное ДФ должны иметь записей, а, б, с df1 и х из df2.

+0

пожалуйста, напишите воспроизводимый пример входных и желаемые результаты – fernandezcuesta

ответ

1

Вы можете concatdf1 и df2, а затем drop_duplicates на колонке id_col.

>>> df = pd.concat((df1, df2)) 
>>> print(df.drop_duplicates('id_col')) 
    id_col two three 
0  a 1.2 4.2 
1  b 70 0.03 
2  c 8  1 
2  x 5  0 
+0

Видите ли, я знал, что должно быть лучшее решение. благодаря – dmeu

1

Я думаю, что вы могли бы сделать все, что Подменю df2 с id_col, которые не находятся в df1.id_col с isin, а затем CONCAT df1 и привел dataframe:

res = pd.concat([df1, df2[~df2.id_col.isin(df1.id_col)]]) 

In [186]: res 
Out[186]: 
    id_col two three 
0  a 1.2 4.2 
1  b 70 0.03 
2  c 8  1 
2  x 5  0 

Хронометраж:

In [23]: %timeit pd.concat((df1, df2)).drop_duplicates('id_col') 
100 loops, best of 3: 1.95 ms per loop 

In [24]: %timeit pd.concat([df1, df2[~df2.id_col.isin(df1.id_col)]]) 
100 loops, best of 3: 1.79 ms per loop 

С сравнение времени это быстрее ..

+0

Это также работает, спасибо - но я не друг 'df2 [df2 блабла]' нотации и поэтому принял Colins ответ – dmeu

+0

@dmeu если вы» Мне интересно, что это быстрее, но я думаю, что решение Колина более читаемо. –

+0

Полезно знать - но да, мой приоритет всегда имеет четкий код, так что будущее меня легко поймет;) – dmeu

Смежные вопросы