Как объединить два фрейма данных с одинаковыми строками? - PullRequest
1 голос
/ 24 апреля 2020

У меня есть два фрейма данных df1 и df2. df1 имеет повторяющийся текст в столбце name, но столбец hobby изменяется. df2 также имеет повторный текст в столбце name. Я хочу объединить оба фрейма данных и сохранить все.

df1:
name   hobby

mike   cricket 
mike   football
jack   chess
jack   football
jack   vollyball
pieter sleeping
pieter cyclying

my df2 равно

df2:
name

mike
pieter 
jack  
mike
pieter 

Теперь мне нужно объединить df2 с df1 в столбце name Так что мой результирующий df3 должен выглядеть следующим образом :

df3:
name   hobby

mike   cricket 
mike   football
pieter sleeping
pieter cyclying
jack   chess
jack   football
jack   vollyball
mike   cricket 
mike   football
pieter sleeping
pieter cyclying


Ответы [ 2 ]

1 голос
/ 24 апреля 2020

IIU C, вы хотите назначить заказ на df2, объединить на name, затем отсортировать по указанному порядку:

(df2.assign(rank=np.arange(len(df2)))
    .merge(df1, on='name')
    .sort_values('rank')
    .drop('rank', axis=1)
)

Вывод:

      name      hobby
0     mike    cricket
1     mike   football
4   pieter   sleeping
5   pieter   cyclying
8     jack      chess
9     jack   football
10    jack  vollyball
2     mike    cricket
3     mike   football
6   pieter   sleeping
7   pieter   cyclying
1 голос
/ 24 апреля 2020

Вы можете сделать это:

Это сохранит дубликаты :

In [438]: pd.merge(df1,df2, on='name')                                                                                                                                                                      
Out[438]: 
      name      hobby
0     mike    cricket
1     mike    cricket
2     mike   football
3     mike   football
4     jack      chess
5     jack   football
6     jack  vollyball
7   pieter   sleeping
8   pieter   sleeping
9   pieter   cyclying
10  pieter   cyclying

Это сбросит дубликаты сверху, если вы хотите :

pd.merge(df1,df2, on='name').drop_duplicates()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...