在数据集中将秒插入到毫秒?

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 没有太多经验,我已经经历了 interpolatedrop_duplicates 但不知道如何去做。

我认为这是一个常见问题,因此非常感谢您的帮助。理想情况下,我想 均匀分布 数字。

您可以使用 groupbyapply 方法。在这种情况下,我没有想出像 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