2016-05-26 4 views
1
import pandas as pd 

left = pd.DataFrame({'A': ['A1', 'A1', 'A2', 'A3'], 
        'B': ['B0', 'B1', 'B2', 'B3'], 
        'C': ['K0', 'K1', 'K0', 'K1']}) 

right = pd.DataFrame({'AA': ['A1', 'A3'], 
         'BB': ['B0', 'B3'], 
         'CC': ['K0', 'K1'], 
         'DD': ['D0', 'D1']}) 

Я хочу, чтобы соединить эти два кадра данных путем добавления столбца DD в left. Значения DD следует выбирать на основании сравнения A и AA, B и BB, C и CC.Как объединить два кадра данных на основе различных имен столбцов

Простой соединительный корпус будет таким, как показано ниже, но в моем случае мне нужно сравнить столбцы с разными именами, а затем я хочу только добавить DD в right.

result = left.join(right, on='DD') 

Результат должен быть:

result = pd.DataFrame({'A': ['A1', 'A1', 'A2', 'A3'], 
         'B': ['B0', 'B1', 'B2', 'B3'], 
         'C': ['K0', 'K1', 'K0', 'K1'], 
         'DD': ['D0', NaN, NaN, 'D1']}) 

ответ

1

Используйте панды merge метод с left_on и right_on параметров.

left.merge(right, how='left', 
      left_on=['A', 'B', 'C'], 
      right_on=['AA', 'BB', 'CC'])[['A', 'B', 'C', 'DD']] 

получает вас:

A B C DD 
0 A1 B0 K0 D0 
1 A1 B1 K1 NaN 
2 A2 B2 K0 NaN 
3 A3 B3 K1 D1 
1

Похоже, что вы хотите merge.

Однако в настоящий момент имена столбцов не совпадают (А есть AA в right).
Так давайте сначала нормализовать их:

In [11]: right.columns = right.columns.map(lambda x: x[0]) 

Тогда мы можем объединить на общих столбцов:

In [12]: left.merge(right) 
Out[12]: 
    A B C D 
0 A1 B0 K0 D0 
1 A3 B3 K1 D1 

In [13]: left.merge(right, how="outer") 
Out[13]: 
    A B C D 
0 A1 B0 K0 D0 
1 A1 B1 K1 NaN 
2 A2 B2 K0 NaN 
3 A3 B3 K1 D1 
+0

ли мне нужно нормализовать столбцы 'left'? – JoeBlack

+0

@JoeBlack код выше рабочий код. но это зависит от того, каков ваш реальный пример жизни (и почему одни и те же столбцы по-разному помечены в разных DataFrames, для меня это похоже на то, что я хотел бы исправить перед слиянием/началом вычислений). –

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