У меня есть несколько подкадров данных, которые я читаю из файлов CSV, и я хочу объединить их в один большой DataFrame, используя pandas
.
Моя проблема заключается в том, что некоторые столбцы в отдельных подкадрахФреймы данных показывают перекрытие.И если они это сделают, значения должны быть вставлены в правильном месте в окончательном DataFrame.
Как правило, все под-DataFrames имеют столбец ID
- set
всех ID
значенийвсе эти DataFrames должны объединяться в последний большой столбец DataFrame ID
.
Каждому ID
назначен определенный CODE
, который является согласованным для всех подкадров DataFrame, поэтому потенциально может бытьвсегда перезаписывается, так как значения должны оставаться неизменными.
Я пробовал всевозможные способы, merge
, join
, concat
и даже простой старый цикл и индекс, со столбцом индекса, без,Вы называете это - но безрезультатно.
Я хочу добавить, что некоторые методы создают новые столбцы с суффиксами - но я намерен объединить все значения из перекрывающихся столбцов в один столбец, так что это не вариант /
Вотнекоторые примеры данных:
import pandas as pd
import numpy as np
np.random.seed(42)
df_1 = pd.DataFrame({
'ID':[3,4,5,6],
'CODE':[2,2,5,4],
'M1':np.random.rand(4),
'M2':np.random.rand(4)
})
df_2 = pd.DataFrame({
'ID':[8,9,10],
'CODE':[7,2,4],
'M1':np.random.rand(3),
'M2':np.random.rand(3)
})
df_3 = pd.DataFrame({
'ID':[3,4,5,6],
'CODE':[2,2,5,4],
'M3':np.random.rand(4),
'M4':np.random.rand(4)
})
df_4 = pd.DataFrame({
'ID':[8,9,10],
'CODE':[7,2,4],
'M3':np.random.rand(3),
'M4':np.random.rand(3)
})
df_5 = pd.DataFrame({
'ID':[8,9,10],
'CODE':[7,2,4],
'M5':np.random.rand(3),
'M6':np.random.rand(3)
})
Используя merge
с how="outer"
, я смог объединить df_1
, df_2
и df_3
с результатом, который мне нужен.
ID CODE M1 M2 M3 M4
0 3 2 0.374540 0.156019 0.181825 0.431945
1 4 2 0.950714 0.155995 0.183405 0.291229
2 5 5 0.731994 0.058084 0.304242 0.611853
3 6 4 0.598658 0.866176 0.524756 0.139494
4 8 7 0.601115 0.969910 NaN NaN
5 9 2 0.708073 0.832443 NaN NaN
6 10 4 0.020584 0.212339 NaN NaN
Но при добавлении df_4
данные добавляются ниже, а не вставляются в правильные места (поэтому в этом случае не будет NaN
с):
ID CODE M1 M2 M3 M4
0 3 2 0.374540 0.156019 0.181825 0.431945
1 4 2 0.950714 0.155995 0.183405 0.291229
2 5 5 0.731994 0.058084 0.304242 0.611853
3 6 4 0.598658 0.866176 0.524756 0.139494
4 8 7 0.601115 0.969910 NaN NaN
5 9 2 0.708073 0.832443 NaN NaN
6 10 4 0.020584 0.212339 NaN NaN
7 8 7 NaN NaN 0.292145 0.785176
8 9 2 NaN NaN 0.366362 0.199674
9 10 4 NaN NaN 0.456070 0.514234
Наконец, объединениевсе DataFrames в этом примере должны давать такой результат:
ID CODE M1 M2 M3 M4 M5 M6
0 3 2 0.374540 0.156019 0.181825 0.431945 NaN NaN
1 4 2 0.950714 0.155995 0.183405 0.291229 NaN NaN
2 5 5 0.731994 0.058084 0.304242 0.611853 NaN NaN
3 6 4 0.598658 0.866176 0.524756 0.139494 NaN NaN
4 8 7 0.601115 0.969910 0.292145 0.785176 0.592414 0.170524
5 9 2 0.708073 0.832443 0.366362 0.199674 0.046450 0.065051
6 10 4 0.020584 0.212339 0.456070 0.514234 0.607544 0.948885