Приносим свои извинения, если это вопрос RTFM, но многочисленные документы и вопросы, кажется, решают несколько иные проблемы, чем эта: Как я могу наиболее элегантно обновить существующий DataFrame новым, частично перекрывающимся? Это; объединение обоих измерений с указанным приоритетом.
>>> old_df # Original data frame which I would like to update
Stat1 Stat2
Time
2020-04-17 117.2 217.2
2020-04-18 118.2 218.2
2020-04-19 119.2 219.2
>>> new_df # More recent data frame, partly overlapping the original in both dimensions
Stat1 Stat3
Time
2020-04-18 118.1 318.1
2020-04-19 119.1 319.1
2020-04-20 120.1 320.1
2020-04-21 121.1 321.1
>>> upd_df # Desired result; new where possible, old otherwise
Stat1 Stat2 Stat3
Time
2020-04-17 117.2 217.2 NaN
2020-04-18 118.1 218.2 318.1
2020-04-19 119.1 219.2 319.1
2020-04-20 120.1 NaN 320.1
2020-04-21 121.1 NaN 321.1
Во время кодирования; формы, имена столбцов и периоды времени двух DF неизвестны.
Код для создания двух DF и требуемый результат:
>>> import numpy as np
>>> import pandas as pd
>>> old_ttags = [pd.Timestamp('2020-04-17'), pd.Timestamp('2020-04-18'), pd.Timestamp('2020-04-19')]
>>> old_data = {'Time': old_ttags, 'Stat1': [117.2, 118.2, 119.2], 'Stat2': [217.2, 218.2, 219.2]}
>>> old_df = pd.DataFrame(old_data).set_index('Time')
>>> new_ttags = [pd.Timestamp('2020-04-18'), pd.Timestamp('2020-04-19'), pd.Timestamp('2020-04-20'), pd.Timestamp('2020-04-21')]
>>> new_data = {'Time': new_ttags, 'Stat1': [118.1, 119.1, 120.1, 121.1], 'Stat3': [318.1, 319.1, 320.1, 321.1]}
>>> new_df = pd.DataFrame(new_data).set_index('Time')
>>> upd_ttags = [pd.Timestamp('2020-04-17'), pd.Timestamp('2020-04-18'), pd.Timestamp('2020-04-19'), pd.Timestamp('2020-04-20'), pd.Timestamp('2020-04-21')]
>>> upd_data = {'Time': upd_ttags, 'Stat1': [117.2, 118.1, 119.1, 120.1, 121.1], 'Stat2': [217.2, 218.2, 219.2, np.nan, np.nan], 'Stat3': [np.nan, 318.1, 319.1, 320.1, 321.1]}
>>> upd_df = pd.DataFrame(upd_data).set_index('Time')