在数据集中将秒插入到毫秒?
Interpolate seconds to milliseconds in dataset?
我有一个按时间戳(以秒为单位)排序的数据集。但是我需要以某种方式将其转换为毫秒精度。
例子
dataset = [
# UNIX timestamps with reading data
(0, 0.48499),
(2, 0.48475),
(3, 0.48475),
(3, 0.48473),
(3, 0.48433),
(3, 0.48403),
(3, 0.48403),
(3, 0.48403),
(3, 0.48403),
(3, 0.48403),
(5, 0.48396),
(12, 0.48353),
]
预期产出(大致)
interpolated = [
# Timestamps with millisecond accuracy
(0.0, 0.48499),
(2.0, 0.48475),
(3.0, 0.48475),
(3.14, 0.48473),
(3.28, 0.48433),
(3.42, 0.48403),
(3.57, 0.48403),
(3.71, 0.48403),
(3.85, 0.48403),
(3.99, 0.48403),
(5.0, 0.48396),
(12.0, 0.48353),
]
我对 Pandas
没有太多经验,我已经经历了 interpolate
和 drop_duplicates
但不知道如何去做。
我认为这是一个常见问题,因此非常感谢您的帮助。理想情况下,我想 均匀分布 数字。
您可以使用 groupby
和 apply
方法。在这种情况下,我没有想出像 interpolate
这样的特定方法,但可能会有更 pythonic 的方法。
代码:
import numpy as np
import pandas as pd
# Create a sample dataframe
dataset = [(0, 0.48499), (2, 0.48475), (3, 0.48475), (3, 0.48473), (3, 0.48433), (3, 0.48403), (3, 0.48403), (3, 0.48403), (3, 0.48403), (3, 0.48403), (5, 0.48396), (12, 0.48353)]
df = pd.DataFrame(dataset, columns=['t', 'value'])
# Convert UNIX timestamps into the desired format
df.t = df.groupby('t', group_keys=False).apply(lambda df: df.t + np.linspace(0, 1, len(df)))
输出:
t
value
0
0.48499
2
0.48475
3
0.48475
3.14286
0.48473
3.28571
0.48433
3.42857
0.48403
3.57143
0.48403
3.71429
0.48403
3.85714
0.48403
4
0.48403
5
0.48396
12
0.48353
(输入:)
t
value
0
0.48499
2
0.48475
3
0.48475
3
0.48473
3
0.48433
3
0.48403
3
0.48403
3
0.48403
3
0.48403
3
0.48403
5
0.48396
12
0.48353
我有一个按时间戳(以秒为单位)排序的数据集。但是我需要以某种方式将其转换为毫秒精度。
例子
dataset = [
# UNIX timestamps with reading data
(0, 0.48499),
(2, 0.48475),
(3, 0.48475),
(3, 0.48473),
(3, 0.48433),
(3, 0.48403),
(3, 0.48403),
(3, 0.48403),
(3, 0.48403),
(3, 0.48403),
(5, 0.48396),
(12, 0.48353),
]
预期产出(大致)
interpolated = [
# Timestamps with millisecond accuracy
(0.0, 0.48499),
(2.0, 0.48475),
(3.0, 0.48475),
(3.14, 0.48473),
(3.28, 0.48433),
(3.42, 0.48403),
(3.57, 0.48403),
(3.71, 0.48403),
(3.85, 0.48403),
(3.99, 0.48403),
(5.0, 0.48396),
(12.0, 0.48353),
]
我对 Pandas
没有太多经验,我已经经历了 interpolate
和 drop_duplicates
但不知道如何去做。
我认为这是一个常见问题,因此非常感谢您的帮助。理想情况下,我想 均匀分布 数字。
您可以使用 groupby
和 apply
方法。在这种情况下,我没有想出像 interpolate
这样的特定方法,但可能会有更 pythonic 的方法。
代码:
import numpy as np
import pandas as pd
# Create a sample dataframe
dataset = [(0, 0.48499), (2, 0.48475), (3, 0.48475), (3, 0.48473), (3, 0.48433), (3, 0.48403), (3, 0.48403), (3, 0.48403), (3, 0.48403), (3, 0.48403), (5, 0.48396), (12, 0.48353)]
df = pd.DataFrame(dataset, columns=['t', 'value'])
# Convert UNIX timestamps into the desired format
df.t = df.groupby('t', group_keys=False).apply(lambda df: df.t + np.linspace(0, 1, len(df)))
输出:
t | value |
---|---|
0 | 0.48499 |
2 | 0.48475 |
3 | 0.48475 |
3.14286 | 0.48473 |
3.28571 | 0.48433 |
3.42857 | 0.48403 |
3.57143 | 0.48403 |
3.71429 | 0.48403 |
3.85714 | 0.48403 |
4 | 0.48403 |
5 | 0.48396 |
12 | 0.48353 |
(输入:)
t | value |
---|---|
0 | 0.48499 |
2 | 0.48475 |
3 | 0.48475 |
3 | 0.48473 |
3 | 0.48433 |
3 | 0.48403 |
3 | 0.48403 |
3 | 0.48403 |
3 | 0.48403 |
3 | 0.48403 |
5 | 0.48396 |
12 | 0.48353 |