如何用Pandas对比两个时刻的设备告警DataFrame并找出新增告警
用Pandas的merge方法找出新增告警
直接用merge结合indicator参数就能快速实现需求,步骤如下:
假设你已经将两个时刻的告警数据分别存入df_old(告警时刻0)和df_new(告警时刻1)两个DataFrame:
- 执行外连接并标记行来源
merged_df = pd.merge(df_old, df_new, on=['Sequence', 'AlarmId', 'Level', 'Description'], how='outer', indicator=True)
这里选择所有字段作为连接键,确保只有完全匹配的告警才会被判定为重复;how='outer'保留两个DataFrame的所有行;indicator=True会新增一列_merge,标记每行来自df_old(left_only)、df_new(right_only)还是两者共有(both)。
- 筛选出新增告警
new_alerts = merged_df[merged_df['_merge'] == 'right_only'].drop('_merge', axis=1)
right_only对应的就是仅在df_new中出现的行,也就是新增的告警,最后用drop去掉标记列即可得到目标结果。
简化方案(如果Sequence是唯一标识)
如果你确定Sequence是每条告警的唯一ID(不会重复),可以仅用Sequence作为连接键,代码会更简洁:
merged_df = pd.merge(df_old, df_new, on='Sequence', how='outer', indicator=True) new_alerts = merged_df[merged_df['_merge'] == 'right_only'].drop('_merge', axis=1)
内容的提问来源于stack exchange,提问作者crist_9
相关产品推荐
相关产品推荐

