在几天之内按日期合并2个Pandas数据帧?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在几天之内按日期合并2个Pandas数据帧?相关的知识,希望对你有一定的参考价值。
所以,我有两个我创建的pandas数据帧并从在线数据中清除,我试图根据它们的日期合并它们,这些都是按月计算的。但是,第一个数据集的月份是在该月的最后一天,第二个数据集是否基于该月的第一天。
# data1
0 1987-01-01 63.752
1 1987-02-01 64.152
2 1987-03-01 64.488
3 1987-04-01 64.995
# data2
0 1987-01-31 1115.10
1 1987-02-30 1095.63
2 1987-03-30 1036.19
3 1987-04-30 1057.08
如果我每天都有一些缺失的数据,我通常会将它们合并为类似的东西
data3 = pd.merge(left=data1, left_on='Date', right=data2, right_on='Date')
但在这种情况下,它们永远不会匹配,即使它们都是相似的日期。
我将如何“告诉”Pandas根据相隔几天的日期合并数据集,并将每个数据命名为“月 - 年”?我不知道从哪里开始,并会感激任何意见。
答案
IIUC,您想在最近的日期合并吗?这就是merge_asof
的用途
如果日期尚未转换为日期时间,请将其转换为如此
data1.date = pd.to_datetime(data1.date)
data2.date = pd.to_datetime(data2.date)
现在完成合并
pd.merge_asof(data1,data2,on='date',direction='nearest')
date value_x value_y
0 1987-01-01 63.752 1115.10
1 1987-02-01 64.152 1036.19
2 1987-03-01 64.488 1057.08
3 1987-04-01 64.995 1057.08
另一答案
如果你的日期列被称为date
,你可以沿着这些方向做一些事情:
data1['date'] = pd.to_datetime(data1['date'])
data2['date'] = pd.to_datetime(data2['date'])
data1['month'] = data1['date'].dt.month
data1['year'] = data1['date'].dt.year
data2['month'] = data2['date'].dt.month
data2['year'] = data2['date'].dt.year
哪会导致这样的事情:
>>> data1
date value month year
0
0 1987-01-01 63.752 1 1987
1 1987-02-01 64.152 2 1987
2 1987-03-01 64.488 3 1987
3 1987-04-01 64.995 4 1987
>>> data2
date value month year
0
0 1987-01-01 1115.10 1 1987
1 1987-01-02 1095.63 1 1987
2 1987-02-01 1036.19 2 1987
3 1987-02-28 1057.08 2 1987
然后,您可以合并月份和年份:
data3=data1.merge(data2, on=['month', 'year'])
以上是关于在几天之内按日期合并2个Pandas数据帧?的主要内容,如果未能解决你的问题,请参考以下文章
Python pandas:合并两个没有键的表(将 2 个数据帧与广播所有元素相乘;NxN 数据帧)