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

2024-05-23 19:56:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据集:

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

  2. 另一个包含过去10年的所有房屋交易和ID(与第一个数据集中的ID相同)

我的问题是找到房子出售之日的能源证书价值。我能够合并房屋ID上的数据集,但不太确定如何处理日期列

能源证书的列有“DateIssuited”,交易数据集的列有“OfficialDateSeld”。然后,条件是找到具有正确房屋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 

还可以查找最接近售出日期的证书(售出前的最新证书) (我知道日期必须采用相同的格式)

我将Python与Jupyter笔记本一起使用


Tags: 数据idnumberdateaddresscertificate能源证书
1条回答
网友
1楼 · 发布于 2024-05-23 19:56:24

我认为您需要^{},但首先需要通过^{}将列转换为datetimess,并通过^{}删除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')

相关问题 更多 >