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)
或者,我愿意接受其他方法来做到这一点 - 这个想法是在拥有唯一索引的同时保留数据。想法?
假设这是您的输入:
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)
它不会修改初始级别,只是添加一个新级别。
| 归档时间: |
|
| 查看次数: |
3150 次 |
| 最近记录: |