首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将特定ID列上的两个DataFrames (数据集)合并为日期条件

将特定ID列上的两个DataFrames (数据集)合并为日期条件
EN

Stack Overflow用户
提问于 2020-02-27 12:45:44
回答 1查看 55关注 0票数 0

我有两个数据集:

  1. One包含了过去10年颁发的房屋能源证书,并提供了房屋的ID和签发日期。一所房子可以颁发更多的证书,因为他们可以续签。
  2. ,另一个包含过去10年的所有房屋交易和ID (与第一个数据集中的id相同)

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

能源证书有带有"DateIssued“的列,事务数据集有列"OfficialDateSold”。条件是找到能源证书与正确的房屋ID,然后与日期最近的销售日期,但不是之后。

数据文件的片段:

代码语言:javascript
运行
复制
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

想要输出

代码语言:javascript
运行
复制
 id                certificate_number      date_issued    sold_date
 id = address_id

 date_issued <= sold_date 

还要找到最接近sold_date的证书(出售前的最新版本)(我知道日期必须是相同的格式)。

我正在使用Python与朱庇特笔记本。

EN

回答 1

Stack Overflow用户

发布于 2020-02-27 13:48:32

我认为您需要merge_asof,但首先必须通过to_datetime将列转换为datetimes,然后通过DataFrame.dropna删除sold_date中缺少值的行。

代码语言:javascript
运行
复制
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')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60433566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档