[英]Merging two DataFrames (Datasets) on a specific ID column but with Date condition
我有两个数据集:
一份包含过去 10 年签发的房屋能源证书,以及房屋的 ID 和签发日期。 一所房子可以颁发更多证书,因为他们可以更新证书。
另一个包含过去 10 年的所有房屋交易和 ID(与第一个数据集中的 ID 相同)
我的问题是找到房子在出售之日的能源证书价值。 我能够合并房屋 ID 上的数据集,但不太确定处理日期列。
能源证书具有“DateIssued”列,而交易数据集具有“OfficialDateSold”列。 条件是找到具有正确房屋 ID 的能源证书,然后找到最接近销售日期的日期,但不是之后。
数据帧的片段:
Transactions:
address_id sold_date
0 1223632151 NaN
1 160073875 2013-09-24
2 160073875 2010-06-16
3 160073875 2009-08-05
4 160073875 2006-12-18
... ... ...
2792726 2147477357 2011-11-03
2792727 2147477357 2014-02-26
2792728 2147477579 2017-05-24
2792729 2147479054 2013-02-04
2792730 2147482539 1993-08-10
Energy Certificate
id certificate_number date_issued
0 1785963944 A2012-274656 27.11.2012 10:32:35
1 512265039 A2010-6435 30.06.2010 13:19:18
2 2003824679 A2014-459214 17.06.2014 11:00:47
3 1902877247 A2011-133593 14.10.2011 12:57:08
4 1620713314 A2009-266 25.12.2009 13:18:32
... ... ... ...
307846 753123775 A2019-1078357 30.11.2019 17:23:59
307847 1927124560 A2019-1078363 30.11.2019 20:44:22
307848 1122610963 A2019-1078371 30.11.2019 22:44:45
307849 28668673 A2019-1078373 30.11.2019 22:56:23
307850 1100393780 A2019-1078377 30.11.2019 23:38:42
想要输出
id certificate_number date_issued sold_date
id = address_id
date_issued <= sold_date
还要找到最接近sold_date(售出前最新的)的证书(我知道日期必须采用相同的格式)
我在 Jupyter Notebook 中使用 Python。
我想你需要merge_asof
,但首先需要转换列,以datetimes
S按to_datetime
缺少价值观和删除行sold_date
通过DataFrame.dropna
:
df1['sold_date'] = pd.to_datetime(df1['sold_date'])
df2['date_issued'] = pd.to_datetime(df2['date_issued'], dayfirst=True)
df1 = df1.dropna(subset=['sold_date'])
df = pd.merge_asof(df2.sort_values('date_issued'),
df1.sort_values('sold_date'),
left_on='date_issued',
right_on='sold_date',
left_by='id',
right_by='address_id')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.