熊猫:按未知时间段分组

时间:2018-12-18 21:21:53

标签: python python-3.x pandas pandas-groupby

我有一个不同时间段的数据集。我想按ID和每个时间段对它进行分组,但是:我不知道每个时间段有多长时间或什至何时开始。我肯定知道的一件事:当两个时间戳之间的差异大于两分钟时,一个新的时间段开始。

示例:这里有两个时间段:

  • 05:36:0705:36:42
  • 21:54:1621: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

有没有大熊猫的助手,可以让我最大程度地检测时间间隔?

谢谢!

2 个答案:

答案 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)

您可以按以下方式使用groupbypd.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"])
相关问题