dataframe中的触发时间列有‘2023-05-01',‘2023-05-02',‘2023-05-08',‘2023-05-09','2023-05-11','2023-05-12', ,'2023-05-13','2023-05-14','2023-05-15',故障代码列为a,a,a,a,a,a,a,a,a如果该故障代码连续触发了3天,则把最新的那一天的行添加到新dataframe
时间: 2023-12-14 21:36:28 浏览: 20
可以使用 Pandas 库中的 shift() 函数来实现。具体步骤如下:
1. 将触发时间转换为 datetime 类型,方便后续操作。
```python
df['触发时间'] = pd.to_datetime(df['触发时间'])
```
2. 使用 shift() 函数将前一天和后一天的故障代码与当前行的故障代码进行比较,判断是否连续触发了 3 天。
```python
df['前一天故障代码'] = df['故障代码'].shift(1)
df['后一天故障代码'] = df['故障代码'].shift(-1)
df['是否连续触发3天'] = (df['前一天故障代码'] == df['故障代码']) & (df['后一天故障代码'] == df['故障代码'])
```
3. 使用 rolling() 和 sum() 函数计算是否连续触发了 3 天,并筛选出最新的那一天的行。
```python
df['是否连续触发3天'] = df['是否连续触发3天'].rolling(window=3, min_periods=1).sum() == 3
new_df = df[df['是否连续触发3天']].iloc[-1:]
```
完整代码如下:
```python
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 将触发时间转换为 datetime 类型
df['触发时间'] = pd.to_datetime(df['触发时间'])
# 使用 shift() 函数将前一天和后一天的故障代码与当前行的故障代码进行比较,判断是否连续触发了 3 天
df['前一天故障代码'] = df['故障代码'].shift(1)
df['后一天故障代码'] = df['故障代码'].shift(-1)
df['是否连续触发3天'] = (df['前一天故障代码'] == df['故障代码']) & (df['后一天故障代码'] == df['故障代码'])
# 使用 rolling() 和 sum() 函数计算是否连续触发了 3 天,并筛选出最新的那一天的行
df['是否连续触发3天'] = df['是否连续触发3天'].rolling(window=3, min_periods=1).sum() == 3
new_df = df[df['是否连续触发3天']].iloc[-1:]
# 打印结果
print(new_df)
```