在已排序的数据帧中合并/合并时间间隔行

2024-09-27 21:26:33 发布

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

我有一个排序的熊猫数据帧,它看起来像下面的一个:

SessionNumber     Timestamp_start       Timestamp_complete   Activity   ColB  ColC
2                 2018-02-11 14:17:00   2018-02-11 14:21:00  "A"           3     4
2                 2018-02-11 14:21:00   2018-02-11 14:22:30  "A"           3     4
2                 2018-02-11 14:23:00   2018-02-11 14:28:30  "A"           3     4
2                 2018-02-11 14:29:00   2018-02-11 14:31:30  "B"           3     4
2                 2018-02-11 14:33:00   2018-02-11 14:35:30  "A"           3     4
...        
3                 2018-02-12 08:44:00   2018-02-12 08:50:30  "A"           2     1
3                 2018-02-12 08:51:00   2018-02-12 08:51:30  "A"           2     1

我想根据SessionNumber将后面的相同活动合并到一个新行。 此示例的结果应为:

SessionNumber     Timestamp_start       Timestamp_complete   Activity   ColB  ColC
2                 2018-02-11 14:17:00   2018-02-11 14:28:30  "A"           3     4
2                 2018-02-11 14:29:00   2018-02-11 14:31:30  "B"           3     4
2                 2018-02-11 14:33:00   2018-02-11 14:35:30  "A"           3     4
...        
3                 2018-02-12 08:44:00   2018-02-12 08:51:00  "A"           2     1

数据帧按以下顺序排序:SessionNumber、Timestamp\u start、Activity

在同一个SessionNumber中,我希望合并紧跟在后面的条目(通过时间戳)。我只想在“活动”、“ColB”和“ColC”中具有相同值,并且“完成”和“开始”时间戳之间的时间差低于某个阈值(例如30秒)时合并行。 由于数据帧已经被排序,最明显的想法是对行进行迭代,并将符合条件的每2行合并。例如,删除一行并将新的时间戳_complete设置为剩余的一行

但是在熊猫中迭代是个坏主意

还有其他办法吗?
谢谢


Tags: 数据示例排序顺序时间条目阈值activity
1条回答
网友
1楼 · 发布于 2024-09-27 21:26:33

根据评论和问题更改更新:

试试这个:

Activitygrp = (df['Activity'] != df['Activity'].shift().bfill()).cumsum().rename('ActivityGroup')
df_m = (df.groupby(['SessionNumber', 'Activity', Activitygrp, 'ColB', 'ColC'])[['Timestamp_start', 'Timestamp_complete']]
          .agg(Time_start=('Timestamp_start', 'first'),
               Time_end=('Timestamp_complete', 'last')))
df_m.reset_index()

输出:

|    |   SessionNumber | Activity   |   ActivityGroup |   ColB |   ColC | Time_start          | Time_end            |
| -:|        :|:     -|        :|   -:|   -:|:          |:          |
|  0 |               2 | "A"        |               0 |      3 |      4 | 2018-02-11 14:17:00 | 2018-02-11 14:28:30 |
|  1 |               2 | "A"        |               2 |      3 |      4 | 2018-02-11 14:33:00 | 2018-02-11 14:35:30 |
|  2 |               2 | "B"        |               1 |      3 |      4 | 2018-02-11 14:29:00 | 2018-02-11 14:31:30 |
|  3 |               3 | "A"        |               2 |      2 |      1 | 2018-02-12 08:44:00 | 2018-02-12 08:51:30 |

相关问题 更多 >

    热门问题