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

标签 python pandas datetime dataframe

我有一个时间序列的交易数据,其中交易时间戳仅精确到秒。有些交易发生在同一秒内,但我无法获得毫秒时间戳。我不想摆脱重复项——而是我想通过假设一秒钟内的多笔交易相隔 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/

相关文章:

python - Pandas read_csv 函数正在读取 csv header 错误

android - 为什么不希望将时区偏移量添加到时间(03 :00 to 08:00)

php - 从 mysql 数据库回显日期时间

python - 在列表理解 python 中返回 true 或 false

python - random.uniform(0,1) 可以生成 0 或 1 吗?

python - Python 中使用 mmap 和 re.findall 搜索大文件时出现 MemoryError

php - MySQL 查询根据当前的确切天数在 WordPress Php 中获取数据

python - 从 XGBoost 模型中获取实际特征名称

python - 带有字符串值的 codernitydb 索引

python - Pandas 在组内填充缺失的日期和值