🔗 Как объединить датафреймы pandas: простой гид для начинающих
Чтобы объединить датафреймы в Pandas, вы можете использовать методы concat, merge или join.
Метод concat соединяет датафреймы вдоль оси, указанной пользователем. Вот пример:
import pandas as pd
df1 = pd.DataFrame({'A': [1, 2, 3],
'B': [4, 5, 6]})
df2 = pd.DataFrame({'A': [7, 8, 9],
'B': [10, 11, 12]})
result = pd.concat([df1, df2])
print(result)
Метод merge объединяет датафреймы на основе общих столбцов. Вот пример:
import pandas as pd
df1 = pd.DataFrame({'key': ['A', 'B', 'C'],
'value': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['B', 'C', 'D'],
'value': [4, 5, 6]})
result = pd.merge(df1, df2, on='key')
print(result)
Метод join объединяет датафреймы по индексам. Вот пример:
import pandas as pd
df1 = pd.DataFrame({'A': [1, 2, 3],
'B': [4, 5, 6]})
df2 = pd.DataFrame({'C': [7, 8, 9],
'D': [10, 11, 12]})
result = df1.join(df2)
print(result)
Детальный ответ
Как объединить датафреймы pandas
Объединение датафреймов в библиотеке pandas может быть полезным для объединения данных из разных источников или для добавления дополнительных колонок в существующий датафрейм. В этой статье мы рассмотрим различные способы объединения датафреймов в pandas с помощью примеров кода.
1. Объединение по столбцам (Merge)
Метод merge() позволяет объединять два датафрейма на основе значения определенных столбцов. По умолчанию, он выполняет внутреннее объединение (inner join), что означает, что в результирующем датафрейме будут только те строки, где значения ключевых столбцов совпадают в обоих датафреймах.
import pandas as pd
# Создадим два датафрейма
df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
'value1': [1, 2, 3, 4]})
df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'],
'value2': [5, 6, 7, 8]})
# Объединим датафреймы по ключевому столбцу
merged_df = pd.merge(df1, df2, on='key')
print(merged_df)
Вывод:
key value1 value2
0 B 2 5
1 D 4 6
Как видно из примера кода, в результирующем датафрейме остались только строки, где значение столбца "key" совпадает в обоих датафреймах.
2. Объединение по строкам (Concatenate)
Метод concat() позволяет объединять датафреймы по строкам. При объединении по строкам, новые строки добавляются в конец результирующего датафрейма.
import pandas as pd
# Создадим два датафрейма
df1 = pd.DataFrame({'col1': [1, 2],
'col2': [3, 4]})
df2 = pd.DataFrame({'col1': [5, 6],
'col2': [7, 8]})
# Объединим датафреймы по строкам
concatenated_df = pd.concat([df1, df2])
print(concatenated_df)
Вывод:
col1 col2
0 1 3
1 2 4
0 5 7
1 6 8
Как видно из примера кода, новые строки добавлены в конец результирующего датафрейма.
3. Объединение по индексам (Join)
Метод join() позволяет объединять датафреймы по их индексам. При объединении по индексам, значения индексов становятся ключами для объединения. По умолчанию, выполняется внутреннее объединение.
import pandas as pd
# Создадим два датафрейма
df1 = pd.DataFrame({'value1': [1, 2, 3]},
index=[0, 1, 2])
df2 = pd.DataFrame({'value2': [4, 5, 6]},
index=[1, 2, 3])
# Объединим датафреймы по индексам
joined_df = df1.join(df2, lsuffix='_left', rsuffix='_right')
print(joined_df)
Вывод:
value1 value2
0 1 NaN
1 2 4.0
2 3 5.0
Как видно из примера кода, в результирующем датафрейме остались только строки с совпадающими индексами в обоих датафреймах.
4. Объединение с использованием конкретных правил (Merge с параметром 'how')
Метод merge() позволяет указать дополнительные правила для объединения датафреймов с помощью параметра 'how'. Ниже приведены наиболее часто используемые значения для этого параметра:
- 'inner': выполняет внутреннее объединение (inner join).
- 'outer': выполняет внешнее объединение (outer join), включая все строки из обоих датафреймов.
- 'left': выполняет левое объединение (left join), включая все строки из левого датафрейма.
- 'right': выполняет правое объединение (right join), включая все строки из правого датафрейма.
import pandas as pd
# Создадим два датафрейма
df1 = pd.DataFrame({'key': ['A', 'B', 'C'],
'value1': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['B', 'C', 'D'],
'value2': [4, 5, 6]})
# Выполним внешнее объединение
merged_df_outer = pd.merge(df1, df2, on='key', how='outer')
# Выполним левое объединение
merged_df_left = pd.merge(df1, df2, on='key', how='left')
# Выполним правое объединение
merged_df_right = pd.merge(df1, df2, on='key', how='right')
print("Outer Join:")
print(merged_df_outer)
print("\nLeft Join:")
print(merged_df_left)
print("\nRight Join:")
print(merged_df_right)
Вывод:
Outer Join:
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
Left Join:
key value1 value2
0 A 1 NaN
1 B 2 4.0
2 C 3 5.0
Right Join:
key value1 value2
0 B 2.0 4
1 C 3.0 5
2 D NaN 6
Как видно из примера кода, внешнее объединение включает все строки из обоих датафреймов, левое объединение включает все строки из левого датафрейма, а правое объединение включает все строки из правого датафрейма.
5. Объединение с использованием общих индексов (Join с параметром 'on')
Метод join() также позволяет объединять датафреймы с использованием общих индексов при указании параметра 'on'. Этот метод аналогичен объединению по индексам с использованием метода merge().
import pandas as pd
# Создадим два датафрейма с общим индексом
df1 = pd.DataFrame({'value1': [1, 2, 3]},
index=[0, 1, 2])
df2 = pd.DataFrame({'value2': [4, 5, 6]},
index=[1, 2, 3])
# Объединим датафреймы по общим индексам
joined_df = df1.join(df2, on=df1.index)
print(joined_df)
Вывод:
key_0 value1 value2
0 0 1 NaN
1 1 2 4.0
2 2 3 5.0
В данном примере кода мы объединяем датафреймы по общим индексам, используя столбец 'key_0' в качестве ключа для объединения.
6. Объединение с учетом дубликатов (Merge с параметром 'on')
При объединении датафреймов, иногда может возникнуть ситуация, когда ключевые столбцы содержат дубликаты. Параметр 'on' в методе merge() позволяет указывать, по какому столбцу производить объединение в этом случае.
import pandas as pd
# Создадим два датафрейма с дубликатными значениями ключевого столбца
df1 = pd.DataFrame({'key': ['A', 'B', 'B'],
'value1': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['B', 'B', 'C'],
'value2': [4, 5, 6]})
# Объединим датафреймы с учетом дубликатов
merged_df = pd.merge(df1, df2, on='key')
print(merged_df)
Вывод:
key value1 value2
0 B 2 4
1 B 2 5
2 B 3 4
3 B 3 5
Как видно из примера кода, при наличии дубликатов в ключевом столбце, все сочетания этих дубликатов будут присутствовать в результирующем датафрейме.
7. Объединение с использованием условий (Merge с параметром 'indicator')
Параметр 'indicator' в методе merge() позволяет добавить специальный столбец, указывающий источник каждой строки в результирующем датафрейме.
import pandas as pd
# Создадим два датафрейма
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', indicator=True)
print(merged_df)
Вывод:
key value1 value2 _merge
0 B 2 4 both
1 C 3 5 both
2 A 1 NaN left_only
3 D NaN 6 right_only
Столбец '_merge' указывает, что строки с ключами 'B' и 'C' присутствуют в обоих датафреймах ('both'), строка с ключом 'A' присутствует только в левом датафрейме ('left_only'), а строка с ключом