如何为Pandas的DateTime列添加递增秒数
问题描述
现有如下格式的DataFrame:
Date_time Col1 0 2023-03-04 10:30:00 10 1 2023-03-04 10:30:00 11 2 2023-03-04 10:30:00 21 3 2023-03-04 10:30:00 54 4 2023-03-04 10:30:00 12 5 2023-03-04 10:30:00 13 6 2023-03-04 10:30:00 21 ... 58 2023-03-04 10:30:00 22 59 2023-03-04 10:30:00 21 60 2023-03-04 10:31:00 25 61 2023-03-04 10:31:00 21 ...
由于数据采集问题,Date_time列的秒数均为0,现在需要让该列的秒数按1秒递增,当秒数到59后,随分钟变化重置为0,最终得到如下结果:
Date_time Col1 0 2023-03-04 10:30:00 10 1 2023-03-04 10:30:01 11 2 2023-03-04 10:30:02 21 3 2023-03-04 10:30:03 54 4 2023-03-04 10:30:04 12 5 2023-03-04 10:30:05 13 6 2023-03-04 10:30:06 21 .... 58 2023-03-04 10:30:58 22 59 2023-03-04 10:30:59 21 60 2023-03-04 10:31:00 25 61 2023-03-04 10:31:01 21 ...
解决方案
可以通过以下步骤实现:
- 确保
Date_time列是datetime类型,若未转换则先执行转换:
import pandas as pd df['Date_time'] = pd.to_datetime(df['Date_time'])
- 按分钟分组,给每组内的行添加从0开始递增的秒数偏移:
# 按日期和分钟分组,生成每组内的行索引(从0开始) df['second_offset'] = df.groupby(df['Date_time'].dt.floor('min')).cumcount() # 将偏移量转为秒级时长,与原时间相加 df['Date_time'] = df['Date_time'] + pd.to_timedelta(df['second_offset'], unit='s') # 可选:删除临时生成的偏移量列 df = df.drop('second_offset', axis=1)
核心逻辑说明:
dt.floor('min')将每个时间戳向下取整到分钟,以此作为分组依据,保证同一分钟内的行归为一组cumcount()为每组内的行生成连续整数(从0开始),刚好对应需要添加的秒数- 将整数转为秒级
Timedelta后与原时间相加,即可实现秒数递增;当分钟切换时,新分组的偏移量重新从0开始,自然完成秒数重置
执行后即可得到符合需求的Date_time列。
内容的提问来源于stack exchange,提问作者serdar_bay
相关产品推荐
相关产品推荐

