我有一个不同时间段的数据集。我想按ID和每个时间段对它进行分组,但是:我不知道每个时间段有多长时间或什至何时开始。我肯定知道的一件事:当两个时间戳之间的差异大于两分钟时,一个新的时间段开始。
示例:这里有两个时间段:
05:36:07
到05:36:42
21:54:16
到21:54:37
数据:
id,timestamp,value
00b0f3,2018-05-21 05:36:07,4
00b0f3,2018-05-21 05:36:14,6
00b0f3,2018-05-21 05:36:24,2
00b0f3,2018-05-21 05:36:40,1
00b0f3,2018-05-21 05:36:42,6
00b0f3,2018-05-21 21:54:16,3
00b0f3,2018-05-21 21:54:27,2
00b0f3,2018-05-21 21:54:30,6
00b0f3,2018-05-21 21:54:34,4
00b0f3,2018-05-21 21:54:37,9
这应该以某种方式结束:
id,timeserie,value
00b0f3,1,19
00b0f3,2,24
有没有大熊猫的助手,可以让我最大程度地检测时间间隔?
谢谢!
答案 0 :(得分:3)
尝试使用cumsum
和布尔测试条件和groupby
:
df.groupby(['id',
(df['timestamp'].diff() > pd.Timedelta(minutes=2)).cumsum()],
as_index=False)['value'].sum()
输出:
id value
0 00b0f3 19
1 00b0f3 24
答案 1 :(得分:0)
您可以按以下方式使用groupby
和pd.Grouper
:
df = df.groupby(["id",pd.Grouper(key="timestamp", freq='2min')]).sum()
结果将是:
>>> df
value
id timestamp
00b0f3 2018-05-21 05:36:00 19
2018-05-21 21:54:00 24
如果您想将id
作为单独的列,则可以在代码行下面运行:
df.reset_index(inplace=True)
然后得到的DataFrame
将是:
>>> df
id timestamp value
0 00b0f3 2018-05-21 05:36:00 19
1 00b0f3 2018-05-21 21:54:00 24
我将您的数据粘贴到csv
文件中,然后将其导入并创建了DataFrame
,如下所示:
import pandas as pd
df = pd.read_csv("D:/tmp/data.csv")
df["timestamp"] = pd.to_datetime(df["timestamp"])