向数据框的日期时间索引中的每个索引添加随机微秒数

Add random number of microseconds to each index in a dataframe's datetime index

我有一个使用日期时间索引的数据框。由于数据的性质,原始数据中存在产生重复索引的重复行。我想为每个索引添加一个随机数的微秒,使它们独一无二。

所以,我的索引目前是:

2021-06-01 08:58:47+00:00

我希望它是:

2021-06-01 08:58:47.011356+00:00

我有一个名为 TimeUTC 的列,我用它来创建索引。我试着给它添加一个随机数的微秒:

    df.index = df.index + datetime.timedelta(microseconds= random.randrange(0,1000000,1))

但是这为所有行添加了相同数量的微秒。我在尝试使用 apply + lambda 时得到了相同的结果。

  1. 如何向每一行的 TimeUTC 添加随机数微秒?
  2. 我可以直接对索引执行此操作而不是更新 TimeUTC 然后重新编制索引吗?

谢谢。

您需要使用 to_timedeltaunit='us' 微秒,以及与数据帧长度相同的随机数数组

# dummy data
df = pd.DataFrame({
    'a':range(10), 
    'TimeUTC':pd.to_datetime(['2021-10-01 00:00:00']*3+['2021-10-01 00:00:01']*5
                             +['2021-10-01 00:00:02']*2, utc=True)}
)

# set seed for reproducibility
np.random.seed(10)

# set the index from TimeUTC and add microseconds with to_timedelta
df.index = df['TimeUTC']+pd.to_timedelta(np.random.randint(1,1000000,len(df)),unit='us')

print(df)
                                  a                   TimeUTC
2021-10-01 00:00:00.345354+00:00  0 2021-10-01 00:00:00+00:00
2021-10-01 00:00:00.760958+00:00  1 2021-10-01 00:00:00+00:00
2021-10-01 00:00:00.881168+00:00  2 2021-10-01 00:00:00+00:00
2021-10-01 00:00:01.443713+00:00  3 2021-10-01 00:00:01+00:00
2021-10-01 00:00:01.617842+00:00  4 2021-10-01 00:00:01+00:00
2021-10-01 00:00:01.105596+00:00  5 2021-10-01 00:00:01+00:00 
2021-10-01 00:00:01.533661+00:00  6 2021-10-01 00:00:01+00:00
2021-10-01 00:00:01.927706+00:00  7 2021-10-01 00:00:01+00:00
2021-10-01 00:00:02.299742+00:00  8 2021-10-01 00:00:02+00:00
2021-10-01 00:00:02.804337+00:00  9 2021-10-01 00:00:02+00:00

请注意,添加随机数可能不会保留数据帧的时间顺序,请参阅本例中的值 a=5,日期时间索引低于前两行