Как объединить dataframe'ы в pandas по нескольким столбцам
Как объединить две pandas таблицы по нескольким столбцам?
Чтобы объединить две pandas таблицы по нескольким столбцам, вы можете использовать метод merge
. В этом методе вы можете указать столбцы, по которым нужно объединить таблицы.
Например, допустим у вас есть две таблицы df1
и df2
, и вы хотите объединить их по столбцам "столбец1" и "столбец2". Вы можете использовать следующий код:
import pandas as pd
df1 = pd.DataFrame({'столбец1': [1, 2, 3],
'столбец2': [4, 5, 6],
'столбец3': [7, 8, 9]})
df2 = pd.DataFrame({'столбец1': [1, 2, 3],
'столбец2': [4, 5, 6],
'столбец4': [10, 11, 12]})
merged_df = pd.merge(df1, df2, on=['столбец1', 'столбец2'])
print(merged_df)
Этот код создаст новую таблицу merged_df
, которая объединит таблицы df1
и df2
по столбцам "столбец1" и "столбец2". Результат будет содержать только те строки, где значения столбцов "столбец1" и "столбец2" совпадают в обеих таблицах.
Детальный ответ
Привет! В этой статье мы рассмотрим, как использовать функцию pandas merge для объединения двух или более DataFrame по нескольким столбцам. Будем считать, что у нас уже есть базовое представление о библиотеке pandas и ее основных функциях.
Перед тем, как мы начнем, нам потребуется импортировать библиотеку pandas в наш код:
import pandas as pd
Что такое объединение DataFrame?
Объединение DataFrame - это процесс соединения двух или более DataFrame на основе определенных столбцов, которые имеют общие значения. Мы можем выполнить объединение по одному или нескольким столбцам, чтобы получить более полную информацию из нескольких источников данных.
Использование функции merge
Функция merge в библиотеке pandas предоставляет нам возможность объединять DataFrame. Давайте рассмотрим несколько примеров, чтобы лучше понять, как она работает.
Пример 1: Объединение по одному столбцу
Допустим, у нас есть два DataFrame - df1 и df2. Мы хотим объединить их по столбцу 'key', который содержит общие значения:
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value1': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['B', 'C', 'D'], 'value2': [4, 5, 6]})
merged_df = pd.merge(df1, df2, on='key')
В результате получим новый DataFrame merged_df, который будет содержать только строки с общим значением ключа:
key value1 value2
0 B 2 4
1 C 3 5
Пример 2: Объединение по нескольким столбцам
Что если у нас есть несколько столбцов, по которым мы хотим объединить DataFrame? Для этого мы можем передать список столбцов в параметре on. Давайте рассмотрим пример:
df1 = pd.DataFrame({'key1': ['A', 'B', 'C'], 'key2': ['X', 'Y', 'Z'], 'value1': [1, 2, 3]})
df2 = pd.DataFrame({'key1': ['B', 'C', 'D'], 'key2': ['Y', 'Z', 'W'], 'value2': [4, 5, 6]})
merged_df = pd.merge(df1, df2, on=['key1', 'key2'])
В этом примере мы объединяем DataFrame по столбцам 'key1' и 'key2'. Результатом будет новый DataFrame с строками, которые имеют общие значения в обоих столбцах:
key1 key2 value1 value2
0 B Y 2 4
1 C Z 3 5
Различные типы объединений
Функция merge также предоставляет нам возможность выполнить различные типы объединений, такие как внутреннее, левое, правое и внешнее объединение. Мы можем указать тип объединения с помощью параметра how. Вот некоторые примеры, чтобы понять, как они работают:
Внутреннее объединение (inner join)
Внутреннее объединение используется, когда мы хотим объединить только те строки, которые имеют общие значения во всех указанных столбцах:
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value1': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['B', 'C', 'D'], 'value2': [4, 5, 6]})
inner_merged_df = pd.merge(df1, df2, on='key', how='inner')
В результате получим новый DataFrame inner_merged_df, который будет содержать только строки с общим значением ключа:
key value1 value2
0 B 2 4
1 C 3 5
Левое объединение (left join)
Левое объединение возвращает все строки из левого DataFrame и соответствующие им строки из правого DataFrame. Если строки из правого DataFrame не соответствуют, то значения заполняются NaN:
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value1': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['B', 'C', 'D'], 'value2': [4, 5, 6]})
left_merged_df = pd.merge(df1, df2, on='key', how='left')
В результате получим новый DataFrame left_merged_df с добавленными значениями из правого DataFrame:
key value1 value2
0 A 1 NaN
1 B 2 4.0
2 C 3 5.0
Правое объединение (right join)
Правое объединение возвращает все строки из правого DataFrame и соответствующие им строки из левого DataFrame. Если строки из левого DataFrame не соответствуют, то значения заполняются NaN:
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value1': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['B', 'C', 'D'], 'value2': [4, 5, 6]})
right_merged_df = pd.merge(df1, df2, on='key', how='right')
В результате получим новый DataFrame right_merged_df с добавленными значениями из левого DataFrame:
key value1 value2
0 B 2.0 4
1 C 3.0 5
2 D NaN 6
Внешнее объединение (outer join)
Внешнее объединение возвращает все строки из обоих DataFrame и заполняет значениями NaN для отсутствующих соответствий:
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value1': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['B', 'C', 'D'], 'value2': [4, 5, 6]})
outer_merged_df = pd.merge(df1, df2, on='key', how='outer')
В результате получим новый DataFrame outer_merged_df со всеми значениями из обоих DataFrame:
key value1 value2
0 A 1.0 NaN
1 B 2.0 4.0
2 C 3.0 5.0
3 D NaN 6.0
Заключение
Мы рассмотрели, как использовать функцию pandas merge для объединения DataFrame по нескольким столбцам. Мы научились объединять DataFrame по одному и нескольким столбцам, а также использовать различные типы объединений. Надеюсь, эта статья была полезной для тебя!