#python #pandas #dataframe #merge
#python #pandas #фрейм данных #объединить
Вопрос:
Извините, если заголовок недостаточно понятен, я лучше объясню себя на примере:
dataframe1 = pd.DataFrame(columns=['UniqueNum', 'B' ,'A'])
dataframe1['UniqueNum'] = ['1a','2b', '3c']
dataframe1['A'] = ['2','6', '7']
dataframe1['B'] = ['3','88', '23']
print dataframe1
dataframe2 = pd.DataFrame(columns=['TestId', 'C' ,'D'])
dataframe2['TestId'] = ['1a','2b', '3c', '1a', '3c', '2b']
dataframe2['C'] = ['22','46', '47','22','46', '47']
dataframe2['D'] = ['13','88', '233','22','46', '47']
print dataframe2
выводятся:
>>>
UniqueNum B A
0 1a 3 2
1 2b 88 6
2 3c 23 7
TestId C D
0 1a 22 13
1 2b 46 88
2 3c 47 233
3 1a 22 22
4 3c 46 46
5 2b 47 47
>>>
Я хочу объединить, чтобы выходной фрейм данных выглядел следующим образом:
TestId C D B A
0 1a 22 13 3 2
1 2b 46 88 88 6
2 3c 47 233 23 7
3 1a 22 22 3 2
4 3c 46 46 23 7
5 2b 47 47 88 6
Имеется в виду добавить в dataframe2 столбцы со значениями, соответствующими совпадению между UniqueNum в dataframe1 и TestID в dataframe2.
Спасибо
Ответ №1:
Вы можете использовать DataFrame.merge
с левым соединением и rename
столбцами:
d = {'UniqueNum':'TestId'}
df = dataframe2.merge(dataframe1.rename(columns=d), how='left', on='TestId')
Или вместо этого создать индекс rename
и изменить параметры для left_on
и right_index
:
df = dataframe2.merge(dataframe1.set_index('UniqueNum'),
how='left',
left_on='TestId',
right_index=True)
Или указать оба столбца и последний удалить UniqueNum
столбец:
df = dataframe2.merge(dataframe1,
how='left',
left_on='TestId',
right_on='UniqueNum').drop('UniqueNum', axis=1)
print (df)
TestId C D B A
0 1a 22 13 3 2
1 2b 46 88 88 6
2 3c 47 233 23 7
3 1a 22 22 3 2
4 3c 46 46 23 7
5 2b 47 47 88 6