如何使具有重复日期时间索引条目的数据帧唯一



我有一个交易数据的时间序列,其中交易时间戳仅细到秒。有些交易在同一秒内发生,但我无法获得毫秒时间戳。我不想摆脱重复项 - 相反,我想通过假设一秒内的多笔交易相隔 1 毫秒发生(一秒内最多有 10 或 20 笔交易,因此不会超过每秒 1000 毫秒的最大时间(,从而使索引更加精细。例如,我有以下内容

8:31:58.000 AM trade1 
8:31:58.000 AM trade2 
8:31:58.000 AM trade3 
8:31:58.000 AM trade4 

并希望生成

8:31:58.000 AM trade1 
8:31:58.001 AM trade2 
8:31:58.002 AM trade3 
8:31:58.003 AM trade4 

或者,我对其他方法持开放态度 - 这个想法是在拥有唯一索引的同时保留数据。思潮?

假设这是您的输入:

df
           trade
08:31:58  trade1
08:31:58  trade2
08:31:58  trade3
08:31:58  trade4

将索引转换为 datetime 。然后,按索引分组,获取累积计数并将其转换为timedelta

最后,添加结果并分配。

dt = pd.to_datetime(df.index, format='%H:%M:%S')
delta = pd.to_timedelta(df.groupby(dt).cumcount(), unit='ms')
df.index = (dt + delta.values).time
df
                  trade
08:31:58         trade1
08:31:58.001000  trade2
08:31:58.002000  trade3
08:31:58.003000  trade4

如果您只想要一个MultiIndex,则可以使用

df.set_index(df.groupby(dt).cumcount(), append=True)
             trade
08:31:58 0  trade1
         1  trade2
         2  trade3
         3  trade4

它不会修改初始级别,只是添加一个新级别。

最新更新