我得到了一个分布不均的数据集,每个条目都有一个time
,这是一个Timestamp对象。现在,我想通过将每列移回一定的时间来创建新列(在平移时间之后选择最接近的条目)。
一个例子:
a b c time
0 0 1 2 2018-08-20 15:00:00
1 3 4 5 2018-08-20 15:00:03
2 6 7 8 2018-08-20 15:00:05
3 9 10 11 2018-08-20 15:00:12
4 12 13 14 2018-08-20 15:00:13
5 15 16 17 2018-08-20 15:00:14
6 18 19 20 2018-08-20 15:00:20
7 21 22 23 2018-08-20 15:00:25
8 24 25 26 2018-08-20 15:00:33
9 27 28 29 2018-08-20 15:00:34
10 30 31 32 2018-08-20 15:00:40
预期的输出(向后移10秒):
a b c time shifted_a shifted_b shifted_c
0 0 1 2 2018-08-20 15:00:00 0 1 2
1 3 4 5 2018-08-20 15:00:03 0 1 2
2 6 7 8 2018-08-20 15:00:05 0 1 2
3 9 10 11 2018-08-20 15:00:12 3 4 5
4 12 13 14 2018-08-20 15:00:13 3 4 5
5 15 16 17 2018-08-20 15:00:14 6 7 8
6 18 19 20 2018-08-20 15:00:20 9 10 11
7 21 22 23 2018-08-20 15:00:25 18 19 20
8 24 25 26 2018-08-20 15:00:33 21 22 23
9 27 28 29 2018-08-20 15:00:34 21 22 23
10 30 31 32 2018-08-20 15:00:40 24 25 26
我的想法是使用bisect.bisect_left
来记录最近时间的位置,然后将移位的数字一一添加。我想知道是否有更好的解决方案?
答案 0 :(得分:2)
首先创建DatetimeIndex
,然后通过方法datetime
将bfill
移至NaN
来创建df = df.set_index('time')
df = df.reindex(df.index-pd.Timedelta(10, unit='s'), method='bfill')
print (df)
a b c
time
2018-08-20 14:59:50 0 1 2
2018-08-20 14:59:53 0 1 2
2018-08-20 14:59:55 0 1 2
2018-08-20 15:00:02 3 4 5
2018-08-20 15:00:03 3 4 5
2018-08-20 15:00:04 6 7 8
2018-08-20 15:00:10 9 10 11
2018-08-20 15:00:15 18 19 20
2018-08-20 15:00:23 21 22 23
2018-08-20 15:00:24 21 22 23
2018-08-20 15:00:30 24 25 26
,以创建reindex
:
button = pygame.transform.scale(infobut, ((130, 80))