Pandas merge_asof 显示两个数据框的日期
Posted
技术标签:
【中文标题】Pandas merge_asof 显示两个数据框的日期【英文标题】:Pandas merge_asof displaying dates of both dataframes 【发布时间】:2021-06-24 01:58:27 【问题描述】:我想在使用 merge_asof 合并后查看“正确”数据框 o 列的日期。
这是一个玩具数据集:
df1=pd.DataFrame('Num':[1,1,2,3,3],
'date':['1995-09-01','1995-10-04','1995-02-07','1995-05-10','1995-05-25'],
'A':[42.5,40,38,40,26],
'B': [13.3,12.3,12.2,11,9])
df2=pd.DataFrame('Num':[1,1,1,1,2,2,3,3,3,3],
'date':['1995-09-01','1995-09-02','1995-10-03','1995-02-04','1995-02-05','1995-02-07','1995-02-08','1995-05-09','1995-05-15','1995-05-21'],
'C':[40.5,39.5,37.2,15,41,38,38.2,39.7,40,28],
'D': [13.3,12.8,12.1,12.3,13.3,12.2,12.4,12.8,11,10]
我将以下内容用于左合并,使用 merge_asof(两个数据帧上的给定日期并不总是匹配)
df3 = (pd.merge_asof(df1.sort_values('date'),
df2.sort_values('date'),
by=['Num'], on=['date'],
direction='nearest'))
此合并为我提供了所需的合并(在合并之前确保将 df1 和 df2 的日期都转换为日期 (pd.to_datetime)
但是,我希望合并也显示正确数据框的日期 (date_df2)。因此,这是所需的输出:
Num date date_df2 A B C D
2 1995-02-07 1995-02-07 38.0 12.2 38.0 12.2
3 1995-05-10 1995-05-09 40.0 11.0 39.7 12.8
3 1995-05-25 1995-05-21 26.0 9.0 28.0 10.0
1 1995-10-01 1995-09-01 42.5 13.3 40.5 13.3
1 1995-10-04 1995-10-03 40.0 12.3 37.2 12.1
【问题讨论】:
【参考方案1】:在执行merge_asof
操作之前,我们可以在数据框df2
中创建一个新列date_df2
:
df3 = pd.merge_asof(df1.sort_values('date'),
df2.assign(date_df2=df2['date']).sort_values('date'),
by='Num', on='date', direction='nearest')
Num date A B C D date_df2
0 2 1995-02-07 38.0 12.2 38.0 12.2 1995-02-07
1 3 1995-05-10 40.0 11.0 39.7 12.8 1995-05-09
2 3 1995-05-25 26.0 9.0 28.0 10.0 1995-05-21
3 1 1995-09-01 42.5 13.3 40.5 13.3 1995-09-01
4 1 1995-10-04 40.0 12.3 37.2 12.1 1995-10-03
【讨论】:
以上是关于Pandas merge_asof 显示两个数据框的日期的主要内容,如果未能解决你的问题,请参考以下文章