в качестве примера, давайте предположим, что у нас есть два DataFrame как df1
и df2
, поэтому, если значения столбцов одинаковы или уникальны, вы просто выполняете объединение, которое выровняет столбцы по вашему желанию.
$ df1
Head Body feat1 feat2
0 1 1 1 1
1 2 2 2 2
2 3 3 3 3
$ df2
Head Body feat3 feat4
0 1 1 1 1
1 2 2 2 2
2 3 3 3 3
Шаг 1 решение:
>>> pd.merge(df1, df2, on=['Head', 'Body'])
Head Body feat1 feat2 feat3 feat4
0 1 1 1 1 1 1
1 2 2 2 2 2 2
2 3 3 3 3 3 3
Во-вторых , если у вас значения столбцов отличаются следующим образом, вы можете использовать pd.concat или pd.merge:
$ df1
Head Body feat1 feat2
0 1 1 1 1
1 2 2 2 2
2 3 3 3 3
$ df2
Head Body feat3 feat4
0 4 1 1 1
1 5 2 2 2
2 6 3 3 3
Шаг 2 решения:
Если вы хотите использовать объединение ключей из обоих кадров, то вы можете сделать это с помощью concat
и merge
следующим образом:
>>> pd.concat([df1,df2], join="outer", sort=False)
Head Body feat1 feat2 feat3 feat4
0 1 1 1.0 1.0 NaN NaN
1 2 2 2.0 2.0 NaN NaN
2 3 3 3.0 3.0 NaN NaN
0 4 1 NaN NaN 1.0 1.0
1 5 2 NaN NaN 2.0 2.0
2 6 3 NaN NaN 3.0 3.0
>>> pd.merge(df1, df2, on=['Head', 'Body'], how='outer')
Head Body feat1 feat2 feat3 feat4
0 1 1 1.0 1.0 NaN NaN
1 2 2 2.0 2.0 NaN NaN
2 3 3 3.0 3.0 NaN NaN
3 4 1 NaN NaN 1.0 1.0
4 5 2 NaN NaN 2.0 2.0
5 6 3 NaN NaN 3.0 3.0
Или вы можете выбрать:
а) если вы хотите использовать клавиши из левой рамки
pd.merge(df1, df2, on=['Head', 'Body'], how='left')
б) если вы хотите использовать ключи из правой рамки
pd.merge(df1, df2, on=['Head', 'Body'], how='right')
По умолчанию требуется «внутренний».
inner: использовать пересечение ключей из обоих фреймов, аналогично SQL
внутреннее соединение; сохранить порядок левых клавиш
Вы можете увидеть DataFrame.merge для подробностей ..
Посмотрев на ваш обходной путь, вы хотите использовать ключи от left frame
>>> pd.merge(df1, df2, on=['Head', 'Body'], how='left')
Head Body feat1 feat2 feat3 feat4
0 1 1 1 1 NaN NaN
1 2 2 2 2 NaN NaN
2 3 3 3 3 NaN NaN