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

如何给DataFrame的DateTime索引每行加随机微秒解决重复索引问题

解决方案

核心问题原因

你之前的写法只调用了1次random.randrange生成单个随机整数,因此所有行都会叠加同一个微秒值,不会出现逐行差异。

问题2解答:可直接操作索引,无需修改TimeUTC列

直接生成和DataFrame行数一致的随机微秒序列,叠加到原有DatetimeIndex上即可:

import datetime
import random
import pandas as pd

# 方法1:标准库实现,适合中小数据量
random_micros = [datetime.timedelta(microseconds=random.randint(0, 999999)) for _ in range(len(df))]
df.index = df.index + random_micros

# 方法2:numpy实现,适合10万行以上的大数据量,效率更高
import numpy as np
random_micros = np.random.randint(0, 1000000, size=len(df))
df.index = df.index + pd.to_timedelta(random_micros, unit='us')

问题1解答:给每行TimeUTC字段添加不同随机微秒

逻辑和直接操作索引一致,把叠加对象换成TimeUTC列即可:

# 中小数据量实现
df['TimeUTC'] = df['TimeUTC'] + [datetime.timedelta(microseconds=random.randint(0, 999999)) for _ in range(len(df))]
# 操作完成后可按需重新设置索引
df = df.set_index('TimeUTC', drop=True)

优化方案(彻底避免索引重复)

如果同一原始秒级时间戳下的行数较多,随机微秒可能出现碰撞导致索引仍重复,可按原始索引分组后给同组内的行分配不重复的微秒,确保索引全局唯一:

df.index = df.index.groupby(df.index).transform(
    lambda group: group + pd.to_timedelta(random.sample(range(1000000), k=len(group)), unit='us')
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:15:03