我们可以对索引进行分组,并创建一列以秒为单位递增的时间增量。
此解决方案会就地更新索引,但您可以使用
set_index
创建所需结果的副本。
g = df.groupby(level=0)
deltas = g.cumcount().div(g['price'].transform('size')).to_numpy()
df.index += pd.to_timedelta(deltas, unit='ms')
或者,作为一个返回副本的离谱单行:
df = (df.groupby(level=0)
.cumcount()
.div(g['price'].transform('size'))
.apply(pd.to_timedelta, unit='s')
.add(df.index)
.pipe(df.set_index))
df
price volume
2020-03-31 09:32:46.000 63 59
2020-03-31 09:39:20.000 99 23
2020-03-31 10:38:46.000 20 32
2020-03-31 10:51:31.000 52 1
2020-03-31 10:51:31.250 53 2
2020-03-31 10:51:31.500 53 2
2020-03-31 10:51:31.750 52 1
2020-03-31 10:54:50.000 2 21
2020-03-31 11:00:34.000 87 29
2020-03-31 11:09:25.000 37 1
2020-03-31 11:09:25.500 38 2
2020-03-31 11:26:10.000 74 87