1

我有一个数据集,它由压力的时间戳读数组成,应该每 15 分钟记录一次并返回一次。下面的示例数据显示数据集中存在大于 15 分钟的间隙

我一直在尝试找到一种方法来添加计数列,该列计算接收到的读数之间缺少多少读数,例如 15 分钟间隔 = 0(错过读数),半小时间隔 = 1(错过读数)和 45 分钟的间隔 = 2,等等。

在这个阶段,我没有任何想要展示的代码,因为我还有很长的路要走,虽然我一直在努力解决这篇文章,但仍然没有成功。如何在 Pandas 的时间序列中检测间隙和连续周期

任何指针将不胜感激

Place             date       pressure (m)
Somewhere   01/09/2019 00:00    34
Somewhere   01/09/2019 00:30    34
Somewhere   01/09/2019 00:45    34
Somewhere   01/09/2019 01:15    34
Somewhere   01/09/2019 01:30    34
Somewhere   01/09/2019 02:15    34
Somewhere   01/09/2019 02:30    34
Somewhere   01/09/2019 02:45    34
Somewhere   01/09/2019 03:15    34
Somewhere   01/09/2019 03:30    34
Somewhere   01/09/2019 03:45    34.5
Somewhere   01/09/2019 04:00    34
Somewhere   01/09/2019 04:15    34
Somewhere   01/09/2019 06:45    33.5
Somewhere   01/09/2019 07:00    33.5
Somewhere   01/09/2019 07:30    34
4

1 回答 1

1

使用,pd.to_datetimedate列转换为 pandas 日期时间序列,然后使用Series.diff计算日期之间的连续差异,然后将此差异除以pd.Timedelta间隔15min,最后使用.fillna填充NaN0

df['date'] = pd.to_datetime(df['date'])
df['gap'] = (df['date'].diff() / pd.Timedelta(minutes=15)).sub(1).fillna(0)

结果:

# print(df)

        Place                date  pressure (m)  gap
0   Somewhere 2019-01-09 00:00:00          34.0  0.0
1   Somewhere 2019-01-09 00:30:00          34.0  1.0
2   Somewhere 2019-01-09 00:45:00          34.0  0.0
3   Somewhere 2019-01-09 01:15:00          34.0  1.0
4   Somewhere 2019-01-09 01:30:00          34.0  0.0
5   Somewhere 2019-01-09 02:15:00          34.0  2.0
6   Somewhere 2019-01-09 02:30:00          34.0  0.0
7   Somewhere 2019-01-09 02:45:00          34.0  0.0
8   Somewhere 2019-01-09 03:15:00          34.0  1.0
9   Somewhere 2019-01-09 03:30:00          34.0  0.0
10  Somewhere 2019-01-09 03:45:00          34.5  0.0
11  Somewhere 2019-01-09 04:00:00          34.0  0.0
12  Somewhere 2019-01-09 04:15:00          34.0  0.0
13  Somewhere 2019-01-09 06:45:00          33.5  9.0
14  Somewhere 2019-01-09 07:00:00          33.5  0.0
15  Somewhere 2019-01-09 07:30:00          34.0  1.0
于 2020-06-24T13:27:00.880 回答