#python #python-3.x #pandas #dataframe
#python #python-3.x #pandas #фрейм данных
Вопрос:
У меня есть повторяющиеся значения в общем столбце фрейма данных, который необходимо объединить с другим. Как я могу объединить их оба без дублирования и без добавления столбцов из другого фрейма данных?
df_1:
df_2:
Как я могу объединить эти 2 фрейма данных в один фрейм данных без повторяющихся столбцов, поскольку список столбцов в обоих фреймах данных одинаковый?
Ожидаемый конечный фрейм данных:
Ответ №1:
Создание первого фрейма данных:
import pandas as pd
df_1 = pd.DataFrame({'Value_1': [25, 22, None, None, 10, 15],
'Value_2': [34, 18, None, None, 0, 12],
'Value_3': [58, 65, None, None, 18, 32]}
, index = ['A1', 'B1', 'C1', 'C1', 'C2', 'D1'])
print(df_1)
Вывод:
Value_1 Value_2 Value_3
A1 25.0 34.0 58.0
B1 22.0 18.0 65.0
C1 NaN NaN NaN
C1 NaN NaN NaN
C2 10.0 0.0 18.0
D1 15.0 12.0 32.0
Создание второго фрейма данных:
df_2 = pd.DataFrame({'Value_1': [15, 45],
'Value_2': [22, 198],
'Value_3': [36, 265]}
, index = ['C1', 'C1'])
print(df_2)
Вывод:
Value_1 Value_2 Value_3
C1 15 22 36
C1 45 198 265
Вы можете дополнить df_1 новыми строками в df_2. Затем обновите значения значениями из df_2.
df = pd.concat([df_1[~df_1.index.isin(df_2.index)], df_2])
print(df)
Вывод:
Value_1 Value_2 Value_3
A1 25.0 34.0 58.0
B1 22.0 18.0 65.0
C2 10.0 0.0 18.0
D1 15.0 12.0 32.0
C1 15.0 22.0 36.0
C1 45.0 198.0 265.0
Ответ №2:
pandas.merge
создаст дополнительные столбцы, поскольку это просто функция объединения. Вы можете попробовать обновить df_1 с помощью df_2, используя [combine_first][1]
для вашего требования. Это будет соответствовать вашему индексу и заменит нулевые значения, как в другом фрейме данных.
df_1
Id Value_1 Value_2 Value_3
0 A1 25.0 34.0 58.0
1 B1 22.0 18.0 65.0
2 C1 NaN NaN NaN
3 C1 NaN NaN NaN
4 C2 10.0 0.0 18.0
5 D1 15.0 12.0 32.0
df_2
Id Value_1 Value_2 Value_3
0 C1 15 22 36
1 C1 45 198 265
Updated_df = (df_1.set_index('Id').combine_first(df_2.set_index('Id')).reset_index().reindex(columns=df_1.columns)).drop_duplicates()
Updated_df
Id Value_1 Value_2 Value_3
0 A1 25.0 34.0 58.0
1 B1 22.0 18.0 65.0
2 C1 15.0 22.0 36.0
3 C1 45.0 198.0 265.0
6 C2 10.0 0.0 18.0
7 D1 15.0 12.0 32.0