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
相关产品推荐
相关产品推荐

