【问题标题】:Resample for different Time Series针对不同的时间序列重新采样
【发布时间】:2018-06-17 11:53:40
【问题描述】:

我有一个熊猫数据框,它由多个对象的时间序列组成,例如每个对象都有一个 ID 和一个值列表。帧的每一行都具有 Object_ID 时间值的形式。现在我想通过 pd.resample() 重新采样这个数据帧。分别处理每个对象的最佳方法是什么?

一个例子——原始数据框是:

ID Time Value
0  0    1
0  1    1
0  2    1
3  1    4
3  2    6
3  3    6
5  10   0
5  11   1

示例输出(从时间步长 1s 到 0.5s 重新采样):

ID Time Value
0  0    1
0  0.5  1
0  1    1
0  1.5  1
0  2    1
0  2.5  1
3  1    4
3  1.5  5
3  2    6
3  2.5  6
3  3    6
3  3.5  6
5  10   0
5  10.5 0.5
5  11   1
5  11.5 1.5

(插值在这里并不重要,我想我可以做到)。 谢谢!

【问题讨论】:

  • 请提供一个小的可重现样本数据集(CSV/作为 Python 字典/Python 代码/文本格式)和您想要的数据集
  • @MaxU 好的,已编辑
  • 你的真实 DF 是否有 Time 作为整数 dtype?
  • @MaxU 是的。到目前为止,我使用了 pd.to_datetime
  • 我相信它可以类似于stackoverflow.com/questions/32012012/…。但是,那里给出的代码对我不起作用,我得到了一些错误(比如分组器不接受到 timeindex 转换的列 c)。

标签: python pandas


【解决方案1】:

几乎有效。结果丢失了最后一行,我没有看到一种简洁的方法来修复它。

result = df.set_index(pd.to_timedelta(df['Time'], unit='s')).groupby('ID')\
.resample('500ms').asfreq().interpolate().reset_index(drop=True)

result['ID'] = result['ID'].astype(int)

# output
result

ID  Time  Value
 0   0.0      1.0
 0   0.5      1.0
 0   1.0      1.0
 0   1.5      1.0
 0   2.0      1.0
 3   1.0      4.0
 3   1.5      5.0
 3   2.0      6.0
 3   2.5      6.0
 3   3.0      6.0
 5  10.0      0.0
 5  10.5      0.5
 5  11.0      1.0

【讨论】:

    猜你喜欢
    • 2014-12-15
    • 2021-12-31
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 2012-11-26
    相关资源
    最近更新 更多