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

Python pandas按指定行数新增时间行且保留原有时间间隙

问题原因

你当前使用的全局重采样+前向填充逻辑存在本质缺陷:

  • 全局按分钟重采样会生成两个相邻活动之间所有分钟的空行,前向填充会把上一个活动的类型错误填充到这些空隙行里
  • 全局重采样的时间范围默认只覆盖原始数据的最早到最晚时间点,因此最后一条活动需要补充的后续分钟行不会被生成
正确实现方案

放弃全局重采样思路,改为遍历每条原始活动记录,独立为每条记录生成对应时长的逐分钟时间行,再合并所有行即可,既不会填充活动间空隙,也能完整补全最后一条活动的后续行。

可直接运行的代码

import pandas as pd

# 复现示例数据
Dffit = pd.DataFrame({
    "Time": ['2022-05-28 08:52:00','2022-05-28 09:00:00','2022-05-28 09:09:00'], 
    "fitnessActivity": ['running','biking','swimming'], 
    "minutes": [3,5,4]
})

# 时间列转datetime类型,修正原代码format参数多余毫秒占位符的问题
Dffit['Time'] = pd.to_datetime(Dffit['Time'], format='%Y-%m-%d %H:%M:%S')

expanded_df_list = []
for _, record in Dffit.iterrows():
    # 为当前活动生成从起始时间开始、共minutes条的1分钟间隔时间序列
    minute_timestamps = pd.date_range(
        start=record['Time'],
        periods=record['minutes'],
        freq='1min'
    )
    # 构造当前活动的所有行:仅起始行保留minutes值,其余行minutes为空
    single_activity_rows = pd.DataFrame({
        'Time': minute_timestamps,
        'fitnessActivity': record['fitnessActivity'],
        'minutes': [record['minutes']] + [float('nan')] * (record['minutes'] - 1)
    })
    expanded_df_list.append(single_activity_rows)

# 合并所有行,按时间排序后重置索引
final_result = pd.concat(expanded_df_list, ignore_index=True)
final_result = final_result.sort_values('Time').reset_index(drop=True)

print(final_result)

运行输出(和期望格式完全一致)

Time fitnessActivity  minutes
0  2022-05-28 08:52:00         running      3.0
1  2022-05-28 08:53:00         running      NaN
2  2022-05-28 08:54:00         running      NaN
3  2022-05-28 09:00:00          biking      5.0
4  2022-05-28 09:01:00          biking      NaN
5  2022-05-28 09:02:00          biking      NaN
6  2022-05-28 09:03:00          biking      NaN
7  2022-05-28 09:04:00          biking      NaN
8  2022-05-28 09:09:00        swimming      4.0
9  2022-05-28 09:10:00        swimming      NaN
10 2022-05-28 09:11:00        swimming      NaN
11 2022-05-28 09:12:00        swimming      NaN

额外说明

  • 如果你的原始数据存在时间乱序的情况,代码里的sort_values('Time')会自动把所有行按时间先后排好,不需要提前对原始数据排序
  • 该逻辑对任意时长的活动记录都生效,不会出现活动间空隙被错误填充的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:51:17