Я получаю данные из Интернета и хочу объединить их с помощью Key1 и Key2. В идеальном случае мы получили df1 - df6 в последовательности (рисунок 1).
Но в большинстве случаев мы не можем оценить, какую часть данных мы можем получить дальше (рисунок 2).
![pic 1 and pic 2](https://i.stack.imgur.com/yeCfy.png)
Во втором случае я хочу поместите новые данные в правильное место в соответствии с Key1 и Key1 и именем столбца. Если столбец или строка не существует, для нее следует добавить новый столбец или строку. И недостающие данные заполняются NaN.
Я пробовал объединять, объединять и объединять, но я не могу получить окончательную цель. Теперь моя реализация: объединить df1 - df3 и df4 - df6, получив результат вместе. Но это не достаточно «умно», и иногда произойдет ошибка, если данные не в этой последовательности.
Основной код:
result_daily = pro.daily(ts_code=ts_code, start_date=ts_since, end_date=ts_until)
result_adjust = pro.adj_factor(ts_code=ts_code, start_date=ts_since, end_date=ts_until)
result_index = pro.daily_basic(ts_code=ts_code, start_date=ts_since, end_date=ts_until)
print(uri + ' - Network finished, time spending: ' + str(clock.elapsed_ms()) + 'ms')
sub_result = None
sub_result = merge_on_columns(sub_result, result_daily, ['ts_code', 'trade_date'])
sub_result = merge_on_columns(sub_result, result_adjust, ['ts_code', 'trade_date'])
sub_result = merge_on_columns(sub_result, result_index, ['ts_code', 'trade_date'])
result = pd.concat([result, sub_result], ignore_index=True)
Также merge_on_columns ():
def merge_on_columns(df1: pd.DataFrame, df2: pd.DataFrame, columns: str or [str]):
if df1 is None:
return df2
if df2 is None:
return df1
if not isinstance(columns, (list, tuple)):
columns = [columns]
# https://stackoverflow.com/questions/19125091/pandas-merge-how-to-avoid-duplicating-columns/19125531#19125531
diff_cols = list(df2.columns.difference(df1.columns))
# if len(diff_cols) == 0:
# df = pd.merge(df1, df2, how='left', on=columns, sort=False)
# else:
merge_columns = diff_cols + columns
df = pd.merge(df1, df2[merge_columns], how='inner', on=columns, sort=False)
return df
Может ли кто-нибудь мне помочь. Спасибо.