簡體   English   中英

在 python 中按 timedelta 分組數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM