首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在最近的日期合并数据

在最近的日期合并数据
EN

Stack Overflow用户
提问于 2017-03-31 20:56:19
回答 1查看 1.1K关注 0票数 3

我有一些数据,一些实验的索引,主题ID和日期。我想把这些数据结合起来,但实验对象可能会在不同的日子里进行实验。这里是我的意思的一个例子。下面是两个不同实验的结果

代码语言:javascript
复制
SubjectID  Date        ScoreA
1          2016-09-20      10
1          2016-09-21      12
1          2016-12-01      11

SubjectID  Date        ScoreB
1          2016-09-20      1
1          2016-09-24      5
1          2016-11-28      3
1          2016-12-11      9

我想将这些行加入到最近的可用日期。所以理想情况下,我想要的输出是

代码语言:javascript
复制
SubjectID   Date1         Date2        ScoreA ScoreB
1            2016-09-20    2016-09-20    10      1
1            2016-09-21    2016-09-24    12      5
1            2016-12-01    2016-11-28    11      3

注“最近日期”是最接近绝对值的日期。我怎样才能实现这样的目标?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-01 01:11:21

我不知道是否有一种使用默认熊猫功能来实现您想要的功能的方法,但是使用自定义聚合函数来实现它是很简单的:

代码语言:javascript
复制
def pick_closest(g):
    closest_date_loc = (g.Date1 - g.Date2).abs().argmin()
    return g.loc[closest_date_loc, ['ScoreA','Date2','ScoreB']]

merged = df1.merge(df2, on='SubjectID', suffixes=['1', '2'])
df3  = merged.groupby(['SubjectID','Date1'], as_index=False).apply(pick_closest).reset_index()
df3

   SubjectID      Date1  ScoreA      Date2  ScoreB
0          1 2016-09-20      10 2016-09-20       1
1          1 2016-09-21      12 2016-09-20       1
2          1 2016-12-01      11 2016-11-28       3

在这个代码片段中,这两个框架最初在SubjectID上合并,生成Date1Date2的所有可能组合。然后,pick_closest函数为每个SubjectID/Date1组选择Date1Date2之间日期差异最小的行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43149536

复制
相关文章

相似问题

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