gpt4 book ai didi

python - 使用 Pandas 处理事件日志 - 在 DataFrame 中查找下一个匹配项

转载 作者:太空宇宙 更新时间:2023-11-04 02:55:24 24 4
gpt4 key购买 nike

我正在用 Pandas 整理一些数据。大部分进展顺利,但我在以下部分遇到困难。

我在数据框中有以下形式的事件。一份记录错误,一份记录恢复。

import pandas as pd

events = pd.DataFrame({'DATE': {0: pd.Timestamp('2017-02-02 09:42:41'),
1: pd.Timestamp('2017-02-02 09:42:49'),
2: pd.Timestamp('2017-02-02 10:09:07'),
3: pd.Timestamp('2017-02-02 10:09:18')},
'ERROR': {0: 'CLAMP_ERROR',
1: 'CLAMP_ERROR',
2: 'CLAMP_ERROR',
3: 'CLAMP_ERROR'},
'UNIT': {0: 'UNIT004',
1: 'UNIT004',
2: 'UNIT004',
3: 'UNIT004'},
'TYPE': {0: 'Unit error',
1: 'Recovery',
2: 'Unit error',
3: 'Recovery'}})

我想做什么

对于每个错误,找到相应的恢复并将恢复的日期放入新列“CLEARED”。正确匹配可以定义为具有相同 UNIT 和 ERROR 的下一次恢复(及时)。

期望的结果:

processed = pd.DataFrame({'DATE': {0: Timestamp('2017-02-02 09:42:41')
1: Timestamp('2017-02-02 10:09:07')},
'ERROR': {0: 'CLAMP_ERROR',
1: 'CLAMP_ERROR'},
'UNIT': {0: 'UNIT004',
1: 'UNIT004'},
'TYPE': {0: 'Unit error',
1: 'Unit error'},
'CLEARED': {0: Timestamp('2017-02-02 09:42:49'),
1: Timestamp('2017-02-02 10:09:18')}}

我尝试过的

我尝试了几种不同的解决方案,它们适用于我在此处包含的示例,但对于真实数据,匹配并不如我所愿。

拆分 df 并将其与左连接合并。它将错误的恢复与错误相匹配。

errors = events.loc[events.TYPE == 'Unit error']
clears = events.loc[events.TYPE == 'Recovery']

processed = pd.merge(errors, clears, how='left', on=['ERROR', 'UNIT'])

我尝试的另一种解决方案是对数据框进行排序,使用与下一行的偏移量创建新列:

events.sort_values('UNIT', 'DATE')

events['nTYPE'] = events['TYPE'].shift(-1)
events['nDATE'] = events['DATE'].shift(-1)
events['nUNIT'] = events['UNIT'].shift(-1)
events['nERROR'] = events['ERROR'].shift(-1)

如果所有错误和恢复总是成对出现,这将完美地工作。

对于如何解决或处理此问题的任何建议,我将不胜感激。

最佳答案

一个猜测:

events = events.sort_values(['UNIT', 'ERROR', 'DATE'])
shifted = events.shift(-1)
shifted['Use'] = (events.ERROR == shifted.ERROR) & (events.UNIT == shifted.UNIT) & (shifted.TYPE == 'Recovery')
events['CLEARED'] = shifted.apply(lambda x: x['DATE'] if x['Use'] else None, axis=1)

关于python - 使用 Pandas 处理事件日志 - 在 DataFrame 中查找下一个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42553048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com