【问题标题】:How can I make a dataframe with duplicate datetime index entries unique?如何使具有重复日期时间索引条目的数据框唯一?
【发布时间】:2018-01-12 20:42:42
【问题描述】:

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

另外,我对其他方法持开放态度 - 想法是在保留数据的同时拥有唯一索引。想法?

【问题讨论】:

    标签: python pandas datetime dataframe


    【解决方案1】:

    假设这是您的输入:

    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
    

    不修改初始关卡,只是增加一个新关卡。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-22
      • 2020-06-04
      • 2021-04-26
      • 2019-04-13
      • 2019-11-06
      • 2021-11-17
      • 2018-11-23
      • 2014-11-06
      相关资源
      最近更新 更多