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

如何用Pandas合并时间间隔0-20秒的交互数据集?

合并时间间隔≤20秒的同源同目标交互记录

没问题,我帮你写了一个基于Python pandas的解决方案,正好能处理你需要合并同来源同目标、时间间隔在20秒以内的交互记录的需求。

你的输入数据

Source, Target, time_start, time_end, total_time
0x597E5627, 0x3C992634, 1532, 1583, 51
0x597E5627, 0x3C992634, 1627, 1652, 25
0x597E5627, 0x3C992634, 1755, 2492, 737
0x597E5627, 0x3C3A21AD, 2649, 2681, 32
0x597E5627, 0x3C3A21AD, 3028, 3058, 30
0x597E5627, 0x3C3A21AD, 3071, 3094, 23

解决方案代码

import pandas as pd

# 读取CSV文件(替换成你的文件路径)
df = pd.read_csv('your_interactions.csv')

# 1. 按Source、Target分组,每组内按time_start排序,确保时间顺序正确
df_sorted = df.sort_values(['Source', 'Target', 'time_start']).reset_index(drop=True)

# 2. 计算同一组内相邻记录的时间间隔(当前记录start - 上一条记录end)
df_sorted['time_gap'] = df_sorted.groupby(['Source', 'Target'])['time_start'].diff()

# 3. 创建合并分组标签:间隔超过20秒则开启新组,同一连续区间的记录会被分到同一组
df_sorted['merge_group'] = (df_sorted['time_gap'] > 20).cumsum()

# 4. 聚合得到合并后的结果:取组内最早的start、最晚的end,总和total_time
merged_df = df_sorted.groupby(['Source', 'Target', 'merge_group']).agg(
    time_start=('time_start', 'min'),
    time_end=('time_end', 'max'),
    total_time=('total_time', 'sum')
).reset_index(drop=True)

# 输出结果到控制台或保存为新CSV
print(merged_df.to_csv(index=False))
# merged_df.to_csv('merged_interactions.csv', index=False)

代码解释

  • 排序:先按来源和目标分组排序,确保记录是按时间先后顺序排列的,避免间隔计算出错。
  • 时间间隔计算:只在同一来源+目标的组内计算相邻记录的间隔,确保不会跨组计算无关记录。
  • 合并分组:用cumsum()给每个独立的连续区间分配唯一标识,只要间隔超过20秒就新建一个组,这样符合条件的连续记录会被分到同一组。
  • 聚合:对每个合并组取最早的起始时间、最晚的结束时间,总和所有的交互时长,得到最终的合并记录。

期望输出结果

Source,Target,time_start,time_end,total_time
0x597E5627,0x3C992634,1532,1583,51
0x597E5627,0x3C992634,1627,1652,25
0x597E5627,0x3C992634,1755,2492,737
0x597E5627,0x3C3A21AD,2649,2681,32
0x597E5627,0x3C3A21AD,3028,3094,53

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:16:39