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

CT0*_*T00 3 python datetime dataframe pandas

我有一个时间序列的交易数据,其中交易时间戳仅精确到秒。有些交易发生在同一秒内,但我无法获得毫秒时间戳。我不想删除重复项 - 相反,我想通过假设一秒内的多个交易相隔 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 
Run Code Online (Sandbox Code Playgroud)

并想生成

8:31:58.000 AM trade1 
8:31:58.001 AM trade2 
8:31:58.002 AM trade3 
8:31:58.003 AM trade4 
Run Code Online (Sandbox Code Playgroud)

或者,我愿意接受其他方法来做到这一点 - 这个想法是在拥有唯一索引的同时保留数据。想法?

cs9*_*s95 7

假设这是您的输入:

df

           trade
08:31:58  trade1
08:31:58  trade2
08:31:58  trade3
08:31:58  trade4
Run Code Online (Sandbox Code Playgroud)

将索引转换为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
Run Code Online (Sandbox Code Playgroud)

如果你只是想要一个MultiIndex,你可以使用

df.set_index(df.groupby(dt).cumcount(), append=True)

             trade
08:31:58 0  trade1
         1  trade2
         2  trade3
         3  trade4
Run Code Online (Sandbox Code Playgroud)

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