首页 > 解决方案 > 基于特定值 Pandas 的顺序合并

问题描述

假设我有两个具有以下值的数据框:

DF1  Name        Time-In
      Person1     2020-04-21 20:32:44
      Person2     2020-04-21 20:37:19
      Person3     2020-04-21 20:44:04
      Person1     2020-04-21 21:17:22
      Person1     2020-04-21 23:00:00


DF2   Name        Time-Out
      Person1     2020-04-21 20:50:11
      Person2     2020-04-21 21:15:15
      Person1     2020-04-21 22:00:59

我想根据 Name 出现的顺序合并表(Person1 在 DF1 上的第一个 Time-In 合并到 Person1 在 DF2 上的第一个 Time-Out),对于像 Person3 这样在 DF2 中没有记录的 NaN 实例,以及Person1 在 DF1 中具有额外值的情况。决赛桌将如下所示:

DF3   Name        Time-In                   Time-Out
      Person1     2020-04-21 20:32:44       2020-04-21 20:50:11
      Person2     2020-04-21 20:37:19       2020-04-21 21:15:15
      Person3     2020-04-21 20:44:04       NaN
      Person1     2020-04-21 21:17:22       2020-04-21 22:00:59
      Person1     2020-04-21 23:00:00       NaN

关于我如何做到这一点的任何想法?提前致谢。

标签: pandas

解决方案


merge_asofdirection='forward'参数一起使用:

df1['Time-In'] = pd.to_datetime(df1['Time-In'])
df2['Time-Out'] = pd.to_datetime(df2['Time-Out'])

df = pd.merge_asof(df1, 
                   df2, 
                   left_on='Time-In',
                   right_on='Time-Out', 
                   by='Name',
                   direction='forward')
print (df)
      Name             Time-In            Time-Out
0  Person1 2020-04-21 20:32:44 2020-04-21 20:50:11
1  Person2 2020-04-21 20:37:19 2020-04-21 21:15:15
2  Person3 2020-04-21 20:44:04                 NaT
3  Person1 2020-04-21 21:17:22 2020-04-21 22:00:59
4  Person1 2020-04-21 23:00:00                 NaT

推荐阅读