dataframe有机组号列,故障代码列,触发时间,如果连续3条同故障代码的记录且连续3天都触发了该机组的故障代码,则将最新一天触发的机组号,故障代码,触发时间加到新的dataframe
时间: 2023-10-06 14:14:58 浏览: 188
可以使用pandas中的groupby和rolling函数来实现这个需求。
首先,假设原始数据的DataFrame为df,包含columns:'机组号列','故障代码列','触发时间'。
我们可以先按照机组号和故障代码进行groupby操作,然后使用rolling函数对每个组内的数据进行滑动窗口计算。
具体操作可以参考以下代码:
```python
import pandas as pd
# 按照机组号和故障代码进行groupby操作
grouped = df.groupby(['机组号列', '故障代码列'])
# 对每个组内的数据进行滑动窗口计算
for name, group in grouped:
# 使用rolling函数对触发时间进行滑动窗口计算
rolling_window = group['触发时间'].rolling(window=3)
# 获取连续三条同故障代码的记录
consecutive_3 = group[rolling_window.apply(lambda x: len(x) == 3 and x[2]-x[0] < pd.Timedelta('3 days'))]
# 如果连续三天都触发了该机组的故障代码,则将最新一天的数据加入新的DataFrame中
if len(consecutive_3) > 0:
latest = consecutive_3.iloc[-1]
new_df = pd.DataFrame({'机组号列': latest['机组号列'], '故障代码列': latest['故障代码列'], '触发时间': latest['触发时间']}, index=[0])
# 将新的DataFrame添加到结果中
if 'result_df' not in locals():
result_df = new_df
else:
result_df = pd.concat([result_df, new_df], ignore_index=True)
```
最终得到的result_df就是符合要求的新的DataFrame,包含columns:'机组号列','故障代码列','触发时间'。
阅读全文