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

在Pandas DataFrame中对连续步行时段的时长求和

解决方案

假设使用Python Pandas处理数据,以下是实现步骤:

步骤1:导入数据并预处理

先将数据读入DataFrame,同时调整字段数据类型以适配后续计算:

import pandas as pd

# 根据实际数据格式调整读取方式,示例为csv格式
df = pd.read_csv("your_accelerometer_data.csv")
# 转换日期格式为日期类型,方便后续分组
df["日期(Date)"] = pd.to_datetime(df["日期(Date)"]).dt.date
# 确保事件类型和时长为数值类型
df["Event Type"] = df["Event Type"].astype(float)
df["时长(Duration)"] = df["时长(Duration)"].astype(float)
# 若数据未按时间顺序排列,需先排序
df = df.sort_values(["日期(Date)", df.index])

步骤2:标记连续步行时段

给每个日期内**连续的步行(Event Type=2)**分配唯一组ID,核心是识别步行时段的起始点:

# 筛选出所有步行数据
walk_df = df[df["Event Type"] == 2].copy()

# 标记新步行时段的起始行:要么日期切换,要么当前行与上一行索引不连续(说明中间有非步行数据,时段中断)
walk_df["is_new_segment"] = (walk_df["日期(Date)"] != walk_df["日期(Date)"].shift(1)) | \
                            (walk_df.index != walk_df.index.shift(1) + 1)

# 生成连续时段的唯一ID
walk_df["segment_id"] = walk_df["is_new_segment"].cumsum()

步骤3:按日期和时段求和

按日期和时段ID分组,计算每个连续步行时段的总时长:

# 分组求和
segment_total = walk_df.groupby(["日期(Date)", "segment_id"])["时长(Duration)"].sum().reset_index()
# 重命名列名更直观
segment_total.rename(columns={"时长(Duration)": "时段总时长"}, inplace=True)

步骤4:后续分析示例

如果需要计算每日平均步行时段时长,可对结果再次分组:

daily_avg = segment_total.groupby("日期(Date)")["时段总时长"].mean().reset_index()
daily_avg.rename(columns={"时段总时长": "每日平均步行时段时长"}, inplace=True)

示例结果说明

针对你提供的样例数据,2021-07-07的7条连续步行数据总时长为1.1+3.2+3.5+4.3+3.7+1.2+1.1=18.1,最终segment_total中会生成一行对应记录:

日期(Date)segment_id时段总时长
2021-07-07118.1

补充说明

若数据包含多个用户ID,需在分组时加入ID字段,确保每个用户的步行时段独立计算,例如:

segment_total = walk_df.groupby(["ID", "日期(Date)", "segment_id"])["时长(Duration)"].sum().reset_index()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:54:51