【问题标题】:Add random number of microseconds to each index in a dataframe's datetime index将随机数微秒添加到数据帧的日期时间索引中的每个索引
【发布时间】:2021-11-25 08:11:25
【问题描述】:

我有一个使用 DateTime 索引的数据框。由于数据的性质,原始数据中有重复的行会产生重复的索引。我想为每个索引添加一个随机数的微秒以使其唯一。

所以,我的索引目前是:

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 然后重新建立索引吗?

谢谢。

【问题讨论】:

  • 如果您的数据是按时间排序的,添加随机微秒的一个风险是,如果第一行的加法大于第二个
  • 好点。添加后我会重新索引。

标签: python pandas datetime timedelta


【解决方案1】:

您需要使用 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,日期时间索引低于前两行

【讨论】:

  • 谢谢你,把它照顾得很好。我在经过各种清理步骤后对索引进行了排序,因此您发现的问题得到了处理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-04
  • 2021-03-12
  • 2019-09-23
  • 2021-01-19
  • 1970-01-01
  • 2021-07-09
  • 2015-03-22
相关资源
最近更新 更多