[英]Group data by timedelta in python
一年多來,我一直在從連接到船舶柴油發動機的流量計中收集燃料消耗數據。 每隔 1 分鍾捕獲一次數據,並以逗號分隔的格式顯示給我。csv 格式。 我正在使用 python/pandas/jupyter 筆記本來分析數據。 這是讀入 juypter notebook 的數據示例。
import pandas as pd
df = pd.read_csv('C:/Users/NETE/Desktop/Test.csv', parse_dates=['Date_Time'], index_col='Date_Time')
df
Out[1]:
Fuel Consumption
Date_Time
2022-01-13 15:30:00 10.3
2022-01-13 15:31:00 10.5
2022-01-13 15:32:00 10.6
2022-01-13 15:33:00 10.3
2022-01-13 15:34:00 10.5
2022-01-13 15:35:00 10.4
2022-01-13 16:35:00 0.1
2022-01-13 16:36:00 20.5
2022-01-13 16:37:00 6.0
2022-01-13 16:38:00 18.0
2022-01-13 17:15:00 15.3
2022-01-13 17:16:00 15.7
2022-01-13 17:17:00 15.7
2022-01-13 17:18:00 15.4
2022-01-13 17:19:00 15.5
2022-01-13 17:20:00 15.7
2022-01-13 22:03:00 26.8
2022-01-13 22:04:00 27.1
我希望能夠按時間戳間隔對數據進行分組,以便時間戳僅相隔 1 分鍾的每個數據塊組合在一起。 一旦遇到大於一分鍾的時間增量,就應該創建一個新塊。 最終,我想對組使用.value_counts()
方法,以便我可以刪除持續時間少於 5 分鍾的組。
我已經考慮過.diff()
, .groupby()
和pd.Grouper
方法,但我是 python (和一般編碼)新手,不知道 go 在哪里使用這個。 我花了很多時間研究這個問題無濟於事。 任何指導將不勝感激。
訣竅是計算每行之間的時間差。 為此,您可以使用shift()
方法。 當您知道差異時,您可以簡單地確定差異是否滿足預定義的條件 - 在您的情況下,如果差異大於 1 分鍾。 此操作生成 boolean 功能。 在此之上應用cumsum()
會生成您正在尋找的組標識符。
這段代碼
# import libraries
import pandas as pd
import numpy as np
# read the data
df = pd.read_csv('./data.csv')
df.columns = ['dt', 'consumption']
# do the processing
df['dt'] = pd.to_datetime(df.dt)
df['dt_diff_in_min'] = (df.dt - df.dt.shift()) / np.timedelta64(1, 'm')
df['group_id'] = df.dt_diff_in_min.gt(1).cumsum()
# show the result
print(df)
返回以下 output。
dt consumption dt_diff_in_min group_id
0 2022-01-13 15:30:00 10.3 NaN 0
1 2022-01-13 15:31:00 10.5 1.0 0
2 2022-01-13 15:32:00 10.6 1.0 0
3 2022-01-13 15:33:00 10.3 1.0 0
4 2022-01-13 15:34:00 10.5 1.0 0
5 2022-01-13 15:35:00 10.4 1.0 0
6 2022-01-13 16:35:00 0.1 60.0 1
7 2022-01-13 16:36:00 20.5 1.0 1
8 2022-01-13 16:37:00 6.0 1.0 1
9 2022-01-13 16:38:00 18.0 1.0 1
10 2022-01-13 17:15:00 15.3 37.0 2
11 2022-01-13 17:16:00 15.7 1.0 2
12 2022-01-13 17:17:00 15.7 1.0 2
13 2022-01-13 17:18:00 15.4 1.0 2
14 2022-01-13 17:19:00 15.5 1.0 2
15 2022-01-13 17:20:00 15.7 1.0 2
16 2022-01-13 22:03:00 26.8 283.0 3
17 2022-01-13 22:04:00 27.1 1.0 3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.