【问题标题】:How to compute average every 5 seconds based on time column in python如何根据python中的时间列每5秒计算一次平均值
【发布时间】:2021-12-15 06:17:59
【问题描述】:

我有一个像下面这样的数据集,它的时间列是基于毫秒的。

pid_col ,timestamp_col ,value_col
31,2019-03-29 07:14:56.999999756,0.0
31,2019-03-29 07:14:57.250000,0.614595
31,2019-03-29 07:14:57.500000,0.678615
31,2019-03-29 07:14:57.750000,0.687578
31,2019-03-29 07:14:58.000000244,0.559804
31,2019-03-29 07:14:58.250000,0.522672
31,2019-03-29 07:14:58.499999512,0.51627
31,2019-03-29 07:14:58.750000,0.51627
31,2019-03-29 07:14:59.000000244,0.517551
31,2019-03-29 07:14:59.250000,0.51627
31,2019-03-29 07:14:59.500000244,0.509868
31,2019-03-29 07:14:59.750000488,0.513709
31,2019-03-29 07:15:00,0.513709
31,2019-03-29 07:15:00.249999512,0.518831
31,2019-03-29 07:15:00.500000,0.531635

如何计算每 5 秒的平均值? 我已经使用了重新采样,但它没有用。这是我的代码:

col_list = ["timestamp", "pid","value"]
df = read_csv("data.csv", usecols=col_list)
df['timestamp'] = to_datetime(df['timestamp'], unit='ms')
timestamp_col=df['timestamp'].tolist()
pid_col=df['pid'].tolist()
value_col=df['value'].tolist()

df['timestamp'].resample('5S').mean()
timestamp_col=df['timestamp'].tolist()

感谢您的帮助

【问题讨论】:

    标签: python pandas datetime time-series


    【解决方案1】:

    timestamp_col定义为重采样前的索引:

    >>> df.set_index('timestamp').groupby('pid') \
          .resample('5S')['value'].mean().reset_index()
    
       pid           timestamp     value
    0   31 2019-03-29 07:14:55  0.512767
    1   31 2019-03-29 07:15:00  0.521392
    

    更新

    也许你更喜欢这个版本:

    >>> df.groupby(['pid', pd.Grouper(freq='5S', key='timestamp')], as_index=False) \
          .agg({'pid': 'first', 'timestamp': 'first', 'value': 'mean'})
    
       pid                     timestamp     value
    0   31 2019-03-29 07:14:56.999999756  0.512767
    1   31 2019-03-29 07:15:00.000000000  0.521392
    

    【讨论】:

    • 这是您所期望的吗?它是否解决了您的问题?
    • 是的,非常感谢,但是时间从 07:14:56 开始!为什么代码从 7:14:55 开始计算?此时的值是多少!?
    • 重采样从 [07:14:55-07:15:00) 到 [07:15:00-07:15:05) 每 5 秒间隔一次。这个区间的标签是左的(默认)。它不关心区间的第一个标签。请检查我的更新答案。
    • 对不起,我弄糊涂了!你能帮帮我吗?对于这个数据集,我应该每五秒精确计算一次值的平均值......我的意思是前 5 秒的值应该在 7:14:56 到 7:15:01 之间计算,以此类推每 5 秒。
    猜你喜欢
    • 2017-09-11
    • 1970-01-01
    • 2017-03-25
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多