繁体   English   中英

在特定 ID 列上合并两个数据帧(数据集)但具有日期条件

[英]Merging two DataFrames (Datasets) on a specific ID column but with Date condition

我有两个数据集:

  1. 一份包含过去 10 年签发的房屋能源证书,以及房屋的 ID 和签发日期。 一所房子可以颁发更多证书,因为他们可以更新证书。

  2. 另一个包含过去 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM