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

如何在Pandas中为每个id创建30秒间隔的新时间列

为每个ID生成间隔30秒的时间列并合并到原DataFrame

你已经通过分组获取了每个ID对应的时间序列,接下来只需要把这些序列平展后和原DataFrame对应上就可以了,这里有两种简单的实现方案:

方案一:使用groupby.apply直接生成列

这种方法更简洁,不需要额外维护列表,直接在分组操作中生成目标列:

import pandas as pd

# 初始化原DataFrame
d = {'id':['abc','abc','abc','abc','def','def','def','ghj','ghj','ghj'], 
     'Section': ['1H','2H','3H','4H','1H','2H','3H','1H','2H','3H'], 
     'time':['00:00:00', '00:00:30', '00:01:00','00:01:30','00:00:00', '00:00:30', '00:01:00','00:00:00', '00:00:30', '00:01:00'], 
     'A': [0.1,0.2,0.5,0.1,0.1,0.2,0.6,0.3,0.1,0.1], 
     'B': [0.6,0.3,0.1,0.1,0.3,0.1,0.5,0.1,0.7,0.2]}
df = pd.DataFrame(d)

# 为每个分组生成时间序列并展开为列
df['tp'] = df.groupby('id').apply(
    lambda x: pd.timedelta_range(start='0 days', periods=len(x), freq='30S')
).explode()

# 将timedelta格式转换为你需要的时分秒字符串
df['tp'] = df['tp'].dt.total_seconds().apply(
    lambda x: pd.to_datetime(x, unit='s').strftime('%H:%M:%S')
)

print(df)

方案二:改进你原有的循环代码

如果你更习惯用循环的方式,只需要把原来的append改成extend,让时间序列平展成和原DataFrame行数一致的列表,再赋值给新列:

import pandas as pd

# 初始化原DataFrame
d = {'id':['abc','abc','abc','abc','def','def','def','ghj','ghj','ghj'], 
     'Section': ['1H','2H','3H','4H','1H','2H','3H','1H','2H','3H'], 
     'time':['00:00:00', '00:00:30', '00:01:00','00:01:30','00:00:00', '00:00:30', '00:01:00','00:00:00', '00:00:30', '00:01:00'], 
     'A': [0.1,0.2,0.5,0.1,0.1,0.2,0.6,0.3,0.1,0.1], 
     'B': [0.6,0.3,0.1,0.1,0.3,0.1,0.5,0.1,0.7,0.2]}
df = pd.DataFrame(d)

# 改进你的循环代码:用extend替代append
g = df.groupby('id')
tp = []
for idd, group in g:
    # extend把每个分组的时间序列元素逐个加入列表
    tp.extend(pd.timedelta_range('0 days 0 hours 0 minutes', periods=len(group), freq='30S'))

# 转换格式并赋值给新列
df['tp'] = pd.Series(tp).dt.total_seconds().apply(
    lambda x: pd.to_datetime(x, unit='s').strftime('%H:%M:%S')
)

print(df)

最终输出

两种方案都会得到你期望的结果:

A    B Section   id       tp
0  0.1  0.6      1H  abc  00:00:00
1  0.2  0.3      2H  abc  00:00:30
2  0.5  0.1      3H  abc  00:01:00
3  0.1  0.1      4H  abc  00:01:30
4  0.1  0.3      1H  def  00:00:00
5  0.2  0.1      2H  def  00:00:30
6  0.6  0.5      3H  def  00:01:00
7  0.3  0.1      1H  ghj  00:00:00
8  0.1  0.7      2H  ghj  00:00:30
9  0.1  0.2      3H  ghj  00:01:00

内容的提问来源于stack exchange,提问作者A.Abs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:33:11