You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决Pandas合并两个DataFrame时出现重复行的问题

解决方法

同一个用户同一天有多条进出记录时,直接按User和Date合并必然会产生笛卡尔积。核心思路是给每组记录按时间排序后加组内序号,再通过序号关联匹配,就能得到一一对应的进出时间对。

步骤1:给进入记录加组内序号

先把时间列转成时间类型(保证排序准确),再按用户、日期分组,对进入时间升序排序后,给每条记录标记当天的进入次数:

import pandas as pd

# 转换时间列格式
dfenter['Enter_Time'] = pd.to_datetime(dfenter['Enter_Time'], format='%H:%M:%S').dt.time
dfexit['Exit_Time'] = pd.to_datetime(dfexit['Exit_Time'], format='%H:%M:%S').dt.time

# 排序并添加组内序号
dfenter = dfenter.sort_values(['User', 'Date', 'Enter_Time'])
dfenter['visit_id'] = dfenter.groupby(['User', 'Date']).cumcount() + 1

步骤2:给退出记录加组内序号

用同样的逻辑处理退出记录,按退出时间升序排序后添加组内序号:

dfexit = dfexit.sort_values(['User', 'Date', 'Exit_Time'])
dfexit['visit_id'] = dfexit.groupby(['User', 'Date']).cumcount() + 1

步骤3:按三个字段合并

现在用User、Date和visit_id三个字段合并,就能得到准确的进出时间对:

merged_df = dfenter.merge(dfexit, on=['User', 'Date', 'visit_id'], how='outer')

最终结果示例

处理后的merged_df结构如下:

UserDateEnter_Timevisit_idExit_Time
A2023-10-0908:09:37112:43:28
A2023-10-0917:07:55222:32:57

这个方法适配大数据集,groupby和cumcount都是Pandas的高效内置操作,不会产生冗余数据,能精准匹配每一次进出记录。

内容的提问来源于stack exchange,提问作者Berkay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 11:20:06