dataframe有机组号列,故障代码列,触发时间,如果触发时间连续3天都触发了该机组的故障代码,则将最新一天触发的机组号,故障代码,触发时间加到新的dataframe
时间: 2023-07-16 07:13:35 浏览: 92
可以使用 pandas 的 groupby 和 rolling 函数实现连续三天触发同一故障代码的筛选,然后将符合要求的数据添加到新的 dataframe 中。下面是一份示例代码:
```python
import pandas as pd
from datetime import timedelta
# 读取原始数据,并按照机组号和故障代码进行分组
df = pd.read_csv('original_data.csv')
grouped = df.groupby(['机组号', '故障代码'])
# 定义一个空的 dataframe,用于存储满足条件的数据
new_df = pd.DataFrame(columns=['机组号', '故障代码', '触发时间'])
# 遍历每个组
for name, group in grouped:
# 对于每个组,都按照触发时间升序排序
group = group.sort_values(by='触发时间')
# 使用 rolling 函数计算连续三天触发同一故障代码的数据
rolling_window = group['触发时间'].rolling(window=3, min_periods=3)
trigger_count = rolling_window.apply(lambda x: (x - x.shift(1)) == timedelta(days=1)).sum()
# 如果触发次数大于等于 3,则说明有连续三天触发同一故障代码的情况
if trigger_count >= 3:
# 取最新一天触发的数据
latest_trigger = group.iloc[-1]
# 将该数据添加到新的 dataframe 中
new_df = new_df.append({
'机组号': latest_trigger['机组号'],
'故障代码': latest_trigger['故障代码'],
'触发时间': latest_trigger['触发时间']
}, ignore_index=True)
# 输出符合条件的数据
print(new_df)
```
其中,`original_data.csv` 是原始数据的文件名,需要根据实际情况进行修改。在代码中,首先按照机组号和故障代码进行分组,然后对于每个组,按照触发时间升序排序。接着使用 rolling 函数计算连续三天触发同一故障代码的数据,如果触发次数大于等于 3,则说明有连续三天触发同一故障代码的情况。最后将最新一天触发的数据添加到新的 dataframe 中,并输出符合条件的数据。
阅读全文