如何在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
相关产品推荐
相关产品推荐

