Объединение панд DataFrames без изменения оригинальных имен столбцов - PullRequest
0 голосов
/ 18 января 2019

Я хочу объединить 2 кадра с некоторыми условиями. Я думаю, что мне нужны агрегированные функции как из pd.merge, так и из pd.concat, я прочитал все примеры здесь , но все еще не нашел информации для решения моей проблемы.

левый:

key1  key2  valueX  valueY
 A    a1     1       4
 B    b1     2       5
 C    c1     3       6

право:

key1  key2  valueX  valueY
 A    a1     7       10
 B    b2     8       11
 C    c1     9       12

Я хочу объединить их, чтобы это было

  • объединены 2 клавиши на оси = 1
  • внешнее соединение
  • оставить значения ValueX, имена значенийY без изменений, просто добавьте новые столбцы справа с теми же именами столбцов

как показано ниже:

    key1  key2  valueX  valueY  valueX  valueY
     A    a1     1       4       7       10
     B    b1     2       5      nan      nan
     B    b2    nan     nan      8       11
     C    c1     3       6       9       12

Ответы [ 3 ]

0 голосов
/ 18 января 2019

Выполните FULL OUTER JOIN с помощью merge и впоследствии удалите суффиксы.

u = left.merge(right, on=['key1', 'key2'], suffixes=('', '__2'), how='outer') 
u.columns = u.columns.str.replace('__2', '')

u
  key1 key2  valueX  valueY  valueX  valueY
0    A   a1     1.0     4.0     7.0    10.0
1    B   b1     2.0     5.0     NaN     NaN
2    C   c1     3.0     6.0     9.0    12.0
3    B   b2     NaN     NaN     8.0    11.0
0 голосов
/ 18 января 2019

Вы можете объединить с пробелом как суффикс и удалить позже

new_df = df1.merge(df2, on = ['key1', 'key2'], suffixes=(' ', ' '), how = 'outer')
new_df.columns = new_df.columns.str.strip()

    key1    key2    valueX  valueY  valueX  valueY
0   A       a1      1.0     4.0     7.0     10.0
1   B       b1      2.0     5.0     NaN     NaN
2   C       c1      3.0     6.0     9.0     12.0
3   B       b2      NaN     NaN     8.0     11.0
0 голосов
/ 18 января 2019

Не знаю, зачем вам нужен дубликат columns, но вы можете использовать concat

Newdf=pd.concat([df1.set_index(['key1',  'key2']),df2.set_index(['key1',  'key2'] )],axis=1).\
        reset_index()
Newdf
Out[711]: 
  key1 key2  valueX  valueY  valueX  valueY
0    A   a1     1.0     4.0     7.0    10.0
1    B   b1     2.0     5.0     NaN     NaN
2    B   b2     NaN     NaN     8.0    11.0
3    C   c1     3.0     6.0     9.0    12.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...