我有一个时间序列的交易数据,其中交易时间戳仅精确到秒。有些交易发生在同一秒内,但我无法获得毫秒时间戳。我不想摆脱重复项——而是我想通过假设一秒钟内的多笔交易相隔 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
它不修改初始级别,只是添加了一个新级别。
关于python - 如何使具有重复日期时间索引条目的数据框唯一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48233746/