Pandas - 如何在不同格式的日期时间列上合并数据框?
Posted
技术标签:
【中文标题】Pandas - 如何在不同格式的日期时间列上合并数据框?【英文标题】:Pandas - how to merge dataframes on datetime column of different format? 【发布时间】:2019-12-13 23:38:14 【问题描述】:我有两个需要根据日期合并的数据框。第一个数据框如下所示:
Time Stamp HP_1H_mean Coolant1_1H_mean Extreme_1H_mean
0 2019-07-26 07:00:00 410.637966 414.607081 0.0
1 2019-07-26 08:00:00 403.521735 424.787366 0.0
2 2019-07-26 09:00:00 403.143925 425.739639 0.0
3 2019-07-26 10:00:00 410.542895 426.210538 0.0
...
17 2019-07-27 00:00:00 0.000000 0.000000 0.0
18 2019-07-27 01:00:00 0.000000 0.000000 0.0
19 2019-07-27 02:00:00 0.000000 0.000000 0.0
20 2019-07-27 03:00:00 0.000000 0.000000 0.0
第二个是这样的:
Time Stamp Qty Compl
0 2019-07-26 150
1 2019-07-27 20
2 2019-07-29 230
3 2019-07-30 230
4 2019-07-31 170
Time Stamp
两个列都是 datetime64[ns]
。我想向左合并,并将日期向前填充到所有其他行中。我的问题是在合并时,来自第二个 df 的 Qty Compl
在每天的午夜应用,有些日子没有午夜时间戳,例如第一个数据帧中的第一天。
有没有办法合并和匹配包含同一天的每一行?所需的输出如下所示:
Time Stamp HP_1H_mean Coolant1_1H_mean Extreme_1H_mean Qty Compl
0 2019-07-26 07:00:00 410.637966 414.607081 0.0 150
1 2019-07-26 08:00:00 403.521735 424.787366 0.0 150
2 2019-07-26 09:00:00 403.143925 425.739639 0.0 150
3 2019-07-26 10:00:00 410.542895 426.210538 0.0 150
...
17 2019-07-27 00:00:00 0.000000 0.000000 0.0 20
18 2019-07-27 01:00:00 0.000000 0.000000 0.0 20
19 2019-07-27 02:00:00 0.000000 0.000000 0.0 20
20 2019-07-27 03:00:00 0.000000 0.000000 0.0 20
【问题讨论】:
【参考方案1】:使用 merge_asof
并按日期时间对两个 DataFrame 进行排序:
#if necessary
df1['Time Stamp'] = pd.to_datetime(df1['Time Stamp'])
df2['Time Stamp'] = pd.to_datetime(df2['Time Stamp'])
df1 = df1.sort_values('Time Stamp')
df2 = df2.sort_values('Time Stamp')
df = pd.merge_asof(df1, df2, on='Time Stamp')
print (df)
Time Stamp HP_1H_mean Coolant1_1H_mean Extreme_1H_mean \
0 2019-07-26 07:00:00 410.637966 414.607081 0.0
1 2019-07-26 08:00:00 403.521735 424.787366 0.0
2 2019-07-26 09:00:00 403.143925 425.739639 0.0
3 2019-07-26 10:00:00 410.542895 426.210538 0.0
4 2019-07-27 00:00:00 0.000000 0.000000 0.0
5 2019-07-27 01:00:00 0.000000 0.000000 0.0
6 2019-07-27 02:00:00 0.000000 0.000000 0.0
7 2019-07-27 03:00:00 0.000000 0.000000 0.0
Qty Compl
0 150
1 150
2 150
3 150
4 20
5 20
6 20
7 20
【讨论】:
太棒了,我从未使用过merge_asof
。它默认为左合并总是它看起来像?谢谢你的帮助,太完美了。时间到了会接受……你太快了;)
@55thSwiss - 是的,这类似于左连接,只是我们匹配最近的键而不是相等的键以上是关于Pandas - 如何在不同格式的日期时间列上合并数据框?的主要内容,如果未能解决你的问题,请参考以下文章
合并两个 Pandas 数据帧,在一个时间列上重新采样,插值