我有两个数据集:
我的问题是,然后找到能源证书价值的房子被出售的日期。我能够合并房屋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的证书(出售前的最新版本)(我知道日期必须是相同的格式)。
我正在使用Python与朱庇特笔记本。
发布于 2020-02-27 13:48:32
我认为您需要merge_asof,但首先必须通过to_datetime将列转换为datetimes,然后通过DataFrame.dropna删除sold_date中缺少值的行。
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')https://stackoverflow.com/questions/60433566
复制相似问题