У меня есть некоторые данные акселерометра, отобранные на частоте 10 Гц, я получаю метку времени Unix в начале передачи только один раз, в то время как остальные показания принимаются без какой-либо метки времени.
1540987236
0 8604,2152,14660
1 8588,2168,14712
2 8558,2180,14674
3 8586,2220,14676
4 8586,2216,14712
5 8632,2230,14656
6 8592,2182,14716
7 8592,2172,14644
8 8588,2190,14672
9 8608,2226,14682
10 8618,2210,14620
11 8616,2204,14580
12 8590,2194,14658
13 8580,2240,14714
14 8588,2234,14710
15 8608,2226,14682
16 8618,2210,14620
17 8616,2204,14580
18 8590,2194,14658
19 8580,2240,14714
20 8588,2234,14710
21 8608,2226,14682
22 8618,2210,14620
23 8616,2204,14580
24 8590,2194,14658
25 8580,2240,14714
26 8588,2234,14710
27 8608,2226,14682
28 8618,2210,14620
29 8616,2204,14580
30 8590,2194,14658
31 8580,2240,14714
32 8588,2234,14710
Здесь я хотел бы добавить 1540987236
к первым 9 показаниям в отдельном столбце, 1540987237
метку времени Unix на 1 секунду 1540987237
и добавить эту новую 1540987237
времени к следующим 10 показаниям и т.д. Для 3000 показаний (5 минут данные акселерометра).
Как я могу достичь этого в пандах? Мне в основном нужна серия, которая имеет ровно 10 временных меток в микросекундах, распределенных равномерно между 2 секундами.
Используя datetime, вы можете написать что-то вроде этого:
#!/usr/bin/python3
import pandas as pd
import datetime
import numpy as np
start = datetime.datetime.fromtimestamp(1540987236)
delta = datetime.timedelta(seconds=1)
df = pd.DataFrame({'a': np.random.randn(50)})
df['timestamp'] = [(i // 10 * delta + start).timestamp()
for i in range(len(df['a']))]
df['timestamp_readable'] = [str(i // 10 * delta + start)
for i in range(len(df['a']))]
DF будет выглядеть так:
a timestamp timestamp_readable
0 -0.600697 1.540987e+09 2018-10-31 13:00:36
1 -1.480723 1.540987e+09 2018-10-31 13:00:36
2 0.662514 1.540987e+09 2018-10-31 13:00:36
3 0.006153 1.540987e+09 2018-10-31 13:00:36
4 -1.305551 1.540987e+09 2018-10-31 13:00:36
5 0.204650 1.540987e+09 2018-10-31 13:00:36
6 0.264038 1.540987e+09 2018-10-31 13:00:36
7 -1.182569 1.540987e+09 2018-10-31 13:00:36
8 -1.339297 1.540987e+09 2018-10-31 13:00:36
9 -0.079093 1.540987e+09 2018-10-31 13:00:36
10 -0.804870 1.540987e+09 2018-10-31 13:00:37
11 0.238080 1.540987e+09 2018-10-31 13:00:37
12 0.647706 1.540987e+09 2018-10-31 13:00:37
13 0.578003 1.540987e+09 2018-10-31 13:00:37
14 0.972857 1.540987e+09 2018-10-31 13:00:37
15 0.414544 1.540987e+09 2018-10-31 13:00:37
16 0.127489 1.540987e+09 2018-10-31 13:00:37
17 0.942130 1.540987e+09 2018-10-31 13:00:37
18 -0.871946 1.540987e+09 2018-10-31 13:00:37
19 0.347854 1.540987e+09 2018-10-31 13:00:37
20 0.986753 1.540987e+09 2018-10-31 13:00:38
21 -0.489212 1.540987e+09 2018-10-31 13:00:38
22 -0.814278 1.540987e+09 2018-10-31 13:00:38
23 0.396447 1.540987e+09 2018-10-31 13:00:38
24 0.642809 1.540987e+09 2018-10-31 13:00:38
25 -0.209376 1.540987e+09 2018-10-31 13:00:38
26 0.884612 1.540987e+09 2018-10-31 13:00:38
27 -0.565565 1.540987e+09 2018-10-31 13:00:38
28 -1.460945 1.540987e+09 2018-10-31 13:00:38
29 -0.541121 1.540987e+09 2018-10-31 13:00:38
30 -0.125047 1.540987e+09 2018-10-31 13:00:39
31 -0.421019 1.540987e+09 2018-10-31 13:00:39
32 -0.333257 1.540987e+09 2018-10-31 13:00:39
...
Я думаю, что вам нужно целочисленное деление на 10
и добавить метку времени Unix:
#default RangeIndex
df['dates'] = df.index // 10 + 1540987236
#general index
df['dates'] = np.arange(len(df.index)) // 10 + 1540987236