【问题标题】:Merge two consecutive rows of event with start and end status合并具有开始和结束状态的连续两行事件
【发布时间】:2021-12-23 11:33:02
【问题描述】:

我有一个这样的数据框:

Date Atomic Timestamp MAUI Measurement Name Operation Type Measurement Type Measurement Context Measurement Action Machine Measurement Action
2021-10-03 14:38:38.194376 7000001 PJ_DBO_KPI_380 0 NaN NaN StartJob 380 Job Start
2021-10-03 14:38:38.836202 9200031 PJ_DBO_KPI_380 0 NaN NaN StartReportServiceCreate 380 ReportServiceCreate Start
2021-10-03 14:38:39.058186 9200032 PJ_DBO_KPI_380 0 NaN NaN FinishReportServiceCreate 380 ReportServiceCreate Finish
2021-10-03 14:38:39.089658 1000001 PJ_DBO_KPI_380 1 NaN NaN StartPickFromCarrier 380 PickFromCarrier Start
2021-10-03 14:38:39.165627 3000402 PJ_DBO_KPI_380 1 NaN NaN StartWaferAlignLoadPatterns 380 WaferAlignLoadPatterns Start
2021-10-03 15:53:50.330514 9200009 PJ_MPS_ARO 0 NaN NaN StartReportsCollection 1385 ReportsCollection Start
2021-10-03 15:53:50.330540 9200010 PJ_MPS_ARO 0 NaN NaN FinishReportsCollection 1385 ReportsCollection Finish
2021-10-03 15:53:50.331217 9200011 PJ_MPS_ARO 0 NaN NaN StartReplayDataCollection 1385 ReplayDataCollection Start
2021-10-03 15:53:50.331243 9200012 PJ_MPS_ARO 0 NaN NaN FinishReplayDataCollection 1385 ReplayDataCollection Finish
2021-10-03 15:53:53.363365 9200002 PJ_MPS_ARO 0 NaN NaN FinishReporting_155 1385 Reporting_155 Finish

我正在寻找一种方法来合并所有具有相同度量的行以及具有开始和结束的操作。如果与上一个开始活动相对应的该事件未完成,则排除所有行。

输出应该是这样的:

Start DT End DT MAUI.x MAUI.y Measurement Name Operation Type Measurement Type Measurement Context Machine Measurement
2021-10-03 14:38:38.836202 2021-10-03 14:38:39.058186 9200031 9200032 PJ_DBO_KPI_380 0 NaN NaN 380 ReportServiceCreate
2021-10-03 15:53:50.330514 2021-10-03 15:53:50.330540 9200009 9200010 PJ_MPS_ARO 0 NaN NaN 1385 ReportsCollection
2021-10-03 15:53:50.331217 2021-10-03 15:53:50.331243 9200011 9200012 PJ_MPS_ARO 0 NaN NaN 1385 ReplayDataCollection

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    关于合并,您可以简单地定义具有开始和结束事件的新数据集,然后将它们合并。假设 df 是您的数据框:

    start_df = df[df.Action == "Start"]
    # build the Start DT column
    start_df["Start DT"] = start_df.Date.str.cat(start_df["Atomic Timestamp"])
    
    finish_df = df[df.Action == "Finish"]
    # build the End DT column
    finish_df["End DT"] = finish_df.Date.str.cat(finish_df["Atomic Timestamp"])
    
    merged = start_df.merge(finish_df, on=["Measurement"])
    

    在那里,您将拥有一个数据框,其中仅包含已开始和已完成的测量。然后,您可以删除未使用的列并根据需要重新排序

    【讨论】:

    • 我已经尝试过这种方法。但是,Measurement 不是唯一的,并且在具有相同测量值时会不断重复,对于 MAUI 列也是如此。因此,由于值重复,将导致错误。如果有什么方法我可以只合并具有该测量开始和结束的相同测量?
    • @LinhHoang 你能否添加更多行重复测量以更好地理解问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多