Извиняюсь, если это дубликат, я не знаю подходящего ключевого слова для проблемы, с которой я сталкиваюсь.Я читаю серию фреймов данных и пытаюсь объединить каждый из них в один большой фрейм данных.DFS - это данные временных рядов, и некоторые из них должны быть добавлены вертикально, а некоторые должны быть добавлены горизонтально.Их несколько тысяч, но этот пример отражает проблему.
Проблема в том, что я не могу найти функцию панд, которая может обрабатывать слияние в обоих направлениях без предварительного знания того, что читается.
import pandas as pd
df1 = pd.DataFrame({'GMT_date': ["01-01-2000","02-01-2000","03-01-2000","04-01-2000","05-01-2000"] ,
'LOWI_Precipitation_24_Hour_(mm)': [2.2, 0, 0.2, 0.4, 0]})
df2 = pd.DataFrame({'GMT_date': ["06-01-2000","07-01-2000","08-01-2000","09-01-2000","10-01-2000"] ,
'LOWI_Precipitation_24_Hour_(mm)': [0.1, 0.1, 3.1, 4.0, 0]})
df3 = pd.DataFrame({'GMT_date': ["06-01-2000","07-01-2000","08-01-2000","09-01-2000","10-01-2000"] ,
'TGPY_Precipitation_24_Hour_(mm)': [0.6, 0.7, 5.1, 1.0, 2.0]})
df_list = [df1, df2, df3]
merged_df = pd.DataFrame()
for df in df_list:
merged_df = merged_df.merge(df, how='outer', left_index=True, right_index=True)
print(merged_df)
GMT_date_x LOWI_Precipitation_24_Hour_(mm)_x GMT_date_y LOWI_Precipitation_24_Hour_(mm)_y GMT_date TGPY_Precipitation_24_Hour_(mm)
0 01-01-2000 2.2 06-01-2000 0.1 06-01-2000 0.6
1 02-01-2000 0.0 07-01-2000 0.1 07-01-2000 0.7
2 03-01-2000 0.2 08-01-2000 3.1 08-01-2000 5.1
3 04-01-2000 0.4 09-01-2000 4.0 09-01-2000 1.0
4 05-01-2000 0.0 10-01-2000 0.0 10-01-2000 2.0
Как видите, столбцам был выделен новый столбец для каждого df, я хотел, чтобы они были в одном столбце.Я также попробовал следующее слияние:
merged_df = pd.concat([merged_df , df], sort=True)
, которое выдает:
GMT_date LOWI_Precipitation_24_Hour_(mm) TGPY_Precipitation_24_Hour_(mm)
0 01-01-2000 2.2 NaN
1 02-01-2000 0.0 NaN
2 03-01-2000 0.2 NaN
3 04-01-2000 0.4 NaN
4 05-01-2000 0.0 NaN
0 06-01-2000 0.1 NaN
1 07-01-2000 0.1 NaN
2 08-01-2000 3.1 NaN
3 09-01-2000 4.0 NaN
4 10-01-2000 0.0 NaN
0 06-01-2000 NaN 0.6
1 07-01-2000 NaN 0.7
2 08-01-2000 NaN 5.1
3 09-01-2000 NaN 1.0
4 10-01-2000 NaN 2.0
Теперь даты находятся в одном столбце, который я хотел, но в столбце даты есть дубликаты.Я попытался:
merged_df = merged_df.join(df)
, который выдает ошибку:
ValueError: columns overlap but no suffix specified: Index(['GMT_date', 'LOWI_Precipitation_24_Hour_(mm)'], dtype='object')
Я также попытался установить индекс GMT_date:
for df in df_list:
df = df.set_index('GMT_date')
merged_df = pd.concat([merged_df, df], axis=1)
print(merged_df)
LOWI_Precipitation_24_Hour_(mm) LOWI_Precipitation_24_Hour_(mm) TGPY_Precipitation_24_Hour_(mm)
01-01-2000 2.2 NaN NaN
02-01-2000 0.0 NaN NaN
03-01-2000 0.2 NaN NaN
04-01-2000 0.4 NaN NaN
05-01-2000 0.0 NaN NaN
06-01-2000 NaN 0.1 0.6
07-01-2000 NaN 0.1 0.7
08-01-2000 NaN 3.1 5.1
09-01-2000 NaN 4.0 1.0
10-01-2000 NaN 0.0 2.0
Это разрешает датув один столбец, и нет повторяющихся дат, но теперь у меня есть данные разбиты на 2 столбца с одинаковым именем?
Мне не хватает простой функции или аргумента, который решает объединение в обоих направлениях в одной строке?
Я попытался посмотреть на: pd.merge_asof, но, похоже, он возвращает только даты, которые делятся между 2 dfs.
Надеюсь, есть простое исправление?Такое ощущение, что вместо 'how': {'left', 'right', 'external', 'inner'} мне нужна опция для 'all' в слиянии.