You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Pandas DataFrame提取连续睡眠阶段分段及对应时间戳

解决方案

步骤1:导入库并加载数据

先导入Pandas,再加载你的睡眠阶段数据(假设DataFrame名为df):

import pandas as pd

# 示例数据(替换为你的实际数据)
data = {
    'Sleep Stage': ['SLEEP-S0', 'SLEEP-S0', 'SLEEP-MT', 'SLEEP-S0', 'SLEEP-S0', 'SLEEP-REM', 'SLEEP-REM', 'SLEEP-S2', 'SLEEP-S2', 'SLEEP-S2'],
    'Time[hh:mm:ss]': ['23:27:14', '23:27:44', '23:28:14', '23:28:44', '23:29:14', '07:57:14', '07:57:44', '07:58:14', '07:58:44', '07:59:14'],
    'Event': ['SLEEP-S0', 'SLEEP-S0', 'SLEEP-MT', 'SLEEP-S0', 'SLEEP-S0', 'SLEEP-REM', 'SLEEP-REM', 'SLEEP-S2', 'SLEEP-S2', 'SLEEP-S2'],
    'Duration[s]': [30, 30, 30, 30, 30, 30, 30, 30, 30, 30]
}
df = pd.DataFrame(data)

步骤2:转换时间列格式

将时间列转为可计算的datetime类型,方便后续生成结束时间:

df['Time[hh:mm:ss]'] = pd.to_datetime(df['Time[hh:mm:ss]'], format='%H:%M:%S').dt.time

步骤3:标记连续相同阶段的分组

通过对比当前行与上一行的睡眠阶段,生成分组标识,把连续相同的阶段归为一组:

# 当睡眠阶段与上一行不同时,分组编号加1
df['group_id'] = (df['Sleep Stage'] != df['Sleep Stage'].shift(1)).cumsum()

步骤4:分组聚合生成结果

对每个分组聚合出所需字段:

  • STAGE:分组内的睡眠阶段(取第一个即可,同组阶段一致)
  • START_POINT:分组的第一个时间点
  • END_POINT:分组最后一个时间点加上对应时长(即阶段结束时间)
  • DURATION:分组内所有时长的总和

代码实现:

result = df.groupby('group_id').agg(
    STAGE=('Sleep Stage', 'first'),
    START_POINT=('Time[hh:mm:ss]', 'first'),
    END_POINT=('Time[hh:mm:ss]', lambda x: (pd.to_datetime(x.iloc[-1].strftime('%H:%M:%S')) + pd.Timedelta(seconds=df.loc[x.index[-1], 'Duration[s]'])).time()),
    DURATION=('Duration[s]', 'sum')
).reset_index(drop=True)

最终输出示例

运行后result的格式如下:

STAGE START_POINT END_POINT  DURATION
0  SLEEP-S0    23:27:14  23:28:14        60
1  SLEEP-MT    23:28:14  23:28:44        30
2  SLEEP-S0    23:28:44  23:29:44        60
3  SLEEP-REM   07:57:14  07:58:14        60
4   SLEEP-S2   07:58:14  07:59:44        90

补充说明

如果数据存在跨天情况(比如从23点到次日7点),建议给时间列补充日期信息,避免结束时间计算逻辑出错;若Event列与Sleep Stage内容完全一致,可直接忽略该列,不影响分组结果。

内容的提问来源于stack exchange,提问作者S C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:01:26