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

DataFrame中相同Measurement对应start、end状态连续事件行合并方法咨询

Pandas 相同Measurement的Start/Finish事件行合并实现方案
  • 核心逻辑:将原始数据按Action拆分为两个子集,通过内连接保留双边匹配的事件,再按要求拼接字段输出
  • 实现代码如下:
import pandas as pd

# 替换为你的原始DataFrame读取逻辑
raw_df = pd.read_excel("你的数据源路径.xlsx")

# 拆分Start、Finish事件子集
start_events = raw_df[raw_df["Action"] == "Start"].copy()
finish_events = raw_df[raw_df["Action"] == "Finish"].copy()

# 定义公共匹配维度,可根据业务实际调整
match_columns = [
    "Measurement", "Measurement Name", "Operation Type", 
    "Measurement Type", "Measurement Context", "Machine"
]

# 内连接合并,自动过滤无匹配的单边事件
merged_result = pd.merge(
    left=start_events,
    right=finish_events,
    on=match_columns,
    how="inner"
)

# 拼接生成起止时间字段
merged_result["Start DT"] = merged_result["Date_x"] + " " + merged_result["Atomic Timestamp_x"].astype(str)
merged_result["End DT"] = merged_result["Date_y"] + " " + merged_result["Atomic Timestamp_y"].astype(str)

# 筛选并重命名为要求的输出字段
output_columns = [
    "Start DT", "End DT",
    "MAUI_x", "MAUI_y",
    "Measurement Name", "Operation Type",
    "Measurement Type", "Measurement Context",
    "Machine", "Measurement"
]
final_output = merged_result[output_columns].rename(
    columns={"MAUI_x": "MAUI.x", "MAUI_y": "MAUI.y"}
)

# 导出结果(可选)
final_output.to_excel("合并结果.xlsx", index=False)

若存在同一个Measurement对应多组同维度事件的场景,可能出现多对多匹配混乱,可新增匹配计数维度解决:

# 按时间戳排序后给同维度事件加顺序计数
start_events = start_events.sort_values("Atomic Timestamp").assign(
    match_seq = start_events.groupby(match_columns).cumcount()
)
finish_events = finish_events.sort_values("Atomic Timestamp").assign(
    match_seq = finish_events.groupby(match_columns).cumcount()
)
# 匹配列新增顺序计数即可
match_columns.append("match_seq")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:54:03