大Pandas:按未知时间段分组

2024-05-19 11:03:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个不同时间段的数据集。我想按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

有没有熊猫的助手,能让我在两个时间间隔内检测出最大的时间段?你知道吗

谢谢!你知道吗


Tags: 数据id示例间隔value助手时间timestamp
2条回答

尝试对groupby使用cumsum和布尔测试条件:

df.groupby(['id',
           (df['timestamp'].diff() > pd.Timedelta(minutes=2)).cumsum()], 
           as_index=False)['value'].sum()

输出:

       id  value
0  00b0f3     19
1  00b0f3     24

可以按如下方式使用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"])

相关问题 更多 >

    热门问题