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

基于两数据集条件列值的动态时间戳追加问题

问题解决:按ID匹配拼接多时间戳到DataFrame

需求说明

有两个DataFrame:df1和df2,共享id列。需要将df2中每个id对应的唯一DateTime值用分号;拼接后,添加到df1的新列fix_timestamps中,且保证与对应id匹配。

示例数据:

  • df1:
idDateanother_col
WPA542023-08-01A
WPA542023-08-01B
WPA542023-08-01C
WPA542023-08-01D
IBT6752023-08-01E
IBT6752023-08-01F
  • df2:
idDateTime
WPA542023-08-01 00:02:52.527
WPA542023-08-01 00:10:10.640
WPA542023-08-01 00:10:12:740
WPA542023-08-01 00:10:26.937
IBT6752023-08-01 00:10:10.640
IBT6752023-08-01 00:10:11.540
IBT6752023-08-01 00:10:12:740

原代码问题分析

原代码使用groupby(df2['id']).transform(...),返回的是与df2行数一致的序列,直接赋值给df1新列时,因两个DataFrame行数不匹配,pandas会广播填充,导致所有行的fix_timestamps值重复;同时该方式未建立df1与df2的id对应关系,最终出现错误结果。

正确解决方案

核心思路

  1. 先对df2按id分组,聚合生成每个id对应的唯一时间戳拼接串,得到id到拼接结果的映射关系
  2. 将该映射关系匹配到df1中,生成目标列

完整代码

import pandas as pd

# 读取文件
file1_path = 'input1.csv'
file2_path = 'input2.csv'
df1 = pd.read_csv(file1_path)
df2 = pd.read_csv(file2_path)

# 处理df2:按id分组,聚合唯一DateTime为分号分隔的字符串
id_timestamp_map = df2.groupby('id')['DateTime'].apply(
    lambda x: ';'.join(x.astype(str).unique())
)

# 将映射匹配到df1,生成新列
df1['fix_timestamps'] = df1['id'].map(id_timestamp_map)

# 保存结果
output_file_path = 'output.csv'
df1.to_csv(output_file_path, index=False)

结果验证

运行后df1的fix_timestamps列会正确匹配:

  • 所有WPA54的行显示:2023-08-01 00:02:52.527;2023-08-01 00:10:10.640;2023-08-01 00:10:12:740;2023-08-01 00:10:26.937
  • 所有IBT675的行显示:2023-08-01 00:10:10.640;2023-08-01 00:10:11.540;2023-08-01 00:10:12:740

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 06:05:12