根据日期时间索引合并两个数据框(不同大小)

Posted

技术标签:

【中文标题】根据日期时间索引合并两个数据框(不同大小)【英文标题】:Merge two dataframes (different sizes) based on date time index 【发布时间】:2020-06-25 14:20:41 【问题描述】:

我有两个数据框,比如说形状为 (2000*4) 的 df_1 和形状为 (69*4) 的 df_2。 df_1 的数据在 2000 分钟内每分钟可用,但 df_2 的数据仅在特定分钟内可用(69 个数据点分布在 2000 分钟内)。我想根据 DateTime 索引合并它们,以便获得形状为 (2000*8) 的最终数据框。

df_1

Datetime                      X1  X2  X3  X4

15/1/2020 08:01:00            1   2   3  4
15/1/2020 08:02:00            5   6   7  8 
15/1/2020 08:03:00            9   10  11 12
15/1/2020 08:04:00            13  14  15 16
.
.
15/1/2020 23:59:00            17  18  19 20

df_2

Datetime                        Y1  Y2  Y3  Y4

15/1/2020 08:01:00               A  B   C   D
15/1/2020 09:30:00               E  F   G   H
15/1/2020 15:03:00               I  J   K   L
15/1/2020 18:04:00
.
.
15/1/2020 23:59:00               M  N   O   p

输出

Datetime                        X1  X2  X3  X4 Y1  Y2  Y3  Y4

15/1/2020 08:01:00              1   2   3  4  A  B   C   D
15/1/2020 08:02:00              5   6   7  8  Nan Nan Nan NAn
15/1/2020 08:03:00              9  10   11 12 Nan Nan Nan nan
15/1/2020 08:04:00
15/1/2020 09:30:00
15/1/2020 15:03:00
15/1/2020 18:04:00              
.
.
15/1/2020 23:59:00              17  18  19 20  M  N   O   p

【问题讨论】:

df_1.join(df_2, how='left')? 【参考方案1】:

您可以执行加入或concat。由于 join 在 cmets 中,我将使用 pd.concat()

final_df = pd.concat([df_1,df_2],axis=1,join='outer')

这是一个例子:

import pandas as pd
df1 = pd.DataFrame('index':['A','B','C','D','E','F'],"A":[1,2,3,4,5,6]).set_index('index')
df2 = pd.DataFrame('index':['B','D','F'],"B":[20,30,40]).set_index('index')

df_output = pd.concat([df1,df2],axis=1,join='outer')

输出:

    A   B
A   1   NaN
B   2   20.0
C   3   NaN
D   4   30.0
E   5   NaN
F   6   40.0

【讨论】:

以上是关于根据日期时间索引合并两个数据框(不同大小)的主要内容,如果未能解决你的问题,请参考以下文章

Python合并两个具有不同日期时间的数据框[重复]

Pandas - 如何在不同格式的日期时间列上合并数据框?

根据最接近的日期时间合并两个数据框

熊猫:从日期时间索引合并日期和小时

如何根据日期列合并两个数据框?

如何在日期时间索引和两列上合并熊猫数据框