首页 > 解决方案 > 如何根据时间合并两个数据框?

问题描述

试图合并到数据框。一是大,二是小。他们将日期时间设置为索引。我希望第二个(和行)的日期时间值合并在第一个日期时间值之间,按时间排序。

df1

df1 = pd.read_csv(left_inputfile_to_read, decimal=".",sep=';', parse_dates = True, low_memory=False)
df1.columns = ['FLIGHT_ID','X', 'Y','MODE_C', 'SPEED', 'HEADING', 'TRK_ROCD', 'TIJD']
df1['datetime'] = pd.to_datetime(df1['TIJD'], infer_datetime_format = True, format="%Y-%M-%D %H:%M:%S")
df1.set_index(['datetime'], inplace=True)
print(df1)

FLIGHT_ID   X   Y   MODE_C  SPEED   HEADING TRK_ROCD    TIJD
datetime                                
2019-01-28 00:26:56 20034026    -13345  -1923   230.0   414 88  NaN 28-1-2019 00:26:56
2019-01-28 00:27:00 20034026    -13275  -1923   230.0   414 88  NaN 28-1-2019 00:27:00
2019-01-28 00:27:05 20034026    -13204  -1923   230.0   414 88  NaN 28-1-2019 00:27:05
2019-01-28 00:27:10 20034026    -13134  -1923   230.0   414 88  NaN 28-1-2019 00:27:10
2019-01-28 00:27:15 20034026    -13064  -1923   230.0   414 88  NaN 28-1-2019 00:27:15
... ... ... ... ... ... ... ... ...
2019-01-29 00:08:32 20035925    13443   -531    230.0   257 85  NaN 29-1-2019 00:08:32
2019-01-29 00:08:37 20035925    13487   -526    230.0   257 85  NaN 29-1-2019 00:08:37
2019-01-29 00:08:42 20035925    13530   -520    230.0   257 85  NaN 29-1-2019 00:08:42
2019-01-29 00:08:46 20035925    13574   -516    230.0   257 85  NaN 29-1-2019 00:08:46
2019-01-29 00:08:51 20035925    13617   -510    230.0   257 85  NaN 29-1-2019 00:08:51
551446 rows × 8 columns

df2

df2 = pd.read_csv(right_inputfile_to_read, decimal=".",sep=';', parse_dates = True, low_memory=False)
df2['datetime'] = pd.to_datetime(df2['T_START'], infer_datetime_format = True, format="%Y-%M-%D %H:%M:%S" , dayfirst=True)
df2.set_index(['datetime'], inplace=True)
df2.drop(columns=['T_START', 'T_END', 'AIRFIELD'], inplace=True)
print(df2)

                      QNH  MODE_C_CORRECTION
datetime                                    
2019-01-28 02:14:00  1022                235
2019-01-28 02:14:00  1022                235
2019-01-28 02:16:00  1019                155
2019-01-28 02:21:00  1019                155
2019-01-28 02:36:00  1019                155
...                   ...                ...
2019-01-28 21:56:00  1014                 21
2019-01-28 22:56:00  1014                 21
2019-01-28 23:26:00  1014                 21
2019-01-28 23:29:00  1014                 21
2019-01-28 23:52:00  1014                 21

[69 rows x 2 columns]

这个想法是 df2 的第一行应该在 2019-01-28 02:14:00 的某个地方插入。我在 Stackoverflow 和 pandas 文档(合并、加入、连接)上花费了数小时,但找不到正确的解决方案。

下一步是根据该时间将“QNH”列中的值内插到 df1 中的行。

非常感谢任何帮助!

标签: pandasdataframedatetimemergeinterpolation

解决方案


只需连接两个 DataFrame 并按日期排序:

df = pd.concat([df1,df2]).sort_values(by='datetime')

对于下一步,您可以使用pandas.DataFrame.interpolate


推荐阅读