pandas - 基于特定值 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
关于我如何做到这一点的任何想法?提前致谢。
解决方案
merge_asof
与direction='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
推荐阅读
- validation - 表单验证的最佳实践
- python - 用另一个数据帧中的数据替换数据帧中的数据
- excel - 在 VLOOKUP 中选择两个值 (value, table, col_index, [range_lookup])
- api - 如何在另一个解决方案中从 MVC 项目调试 Web API 项目
- php - 如何显示 MS。HTML 中的 Office VML 公式?
- c# - 如何杀死asp.net核心中的线程
- octopus-deploy - “目标”在部署“删除附加文件”上意味着什么
- django - 有没有办法将自定义python脚本的返回值用于django模板?
- c# - Entity Framework Core 使用不明确的列名生成 SQL
- php - Webservice注册“created_by”用户