【问题标题】:Identify Updated Value in Time Series Data Python Pandas识别时间序列数据 Python Pandas 中的更新值
【发布时间】:2017-08-12 05:13:15
【问题描述】:

我没有做很多时间序列工作,我知道我对这个解决方案的思考方式并不理想。希望获得有关解决此问题的最有效方法的意见。

我有几天的值,每天有多个由时间戳标识的值。

数据如下所示:

Index      Period     Value         Timestamp
  0          1          73          2017-08-10 16:44:23
  1          1          73          2017-08-09 16:30:12
  2          1          73          2017-08-08 16:40:31
  3          2          50          2017-08-10 16:44:23
  4          2          45          2017-08-09 16:30:12
  5          2          45          2017-08-08 16:40:31
  6          3          13          2017-08-10 16:44:23
  7          3          13          2017-08-09 16:30:12
  8          3          13          2017-08-08 16:40:31

该示例显示了连续三天捕获的三个不同时期的一个数据元素。这个想法是确定任何测量周期(周期 1、2 或 3)的值是否发生变化。

如您在示例中看到的,在第三天 (2017-08-10) 期间 2 的值已更新。我想检测改变的值。

我能弄清楚如何比较的唯一方法是循环遍历我认为既不优雅、效率低下而且绝对不是 Pythonic。

任何人都了解一种无需循环/迭代的方法吗?

提前致谢。

编辑

如果最近的时间戳数据发生值变化,则预期输出将是如下的 df:

Index      Period     Value         Timestamp
  0          1          73          2017-08-10 16:44:23
  3          2          50          2017-08-10 16:44:23
  6          3          13          2017-08-10 16:44:23

【问题讨论】:

  • 你能提供预期的输出吗?
  • 见编辑。谢谢

标签: python pandas datetime time-series


【解决方案1】:

首先,您可以像这样识别发生变化的行:

df['diff'] = df.groupby('Period')['Value'].diff(-1).fillna(0)

   Period  Value            Timestamp  diff
0       1     73  2017-08-10 16:44:23   0.0
1       1     73  2017-08-09 16:30:12   0.0
2       1     73  2017-08-08 16:40:31   0.0
3       2     50  2017-08-10 16:44:23   5.0
4       2     45  2017-08-09 16:30:12   0.0
5       2     45  2017-08-08 16:40:31   0.0
6       3     13  2017-08-10 16:44:23   0.0
7       3     13  2017-08-09 16:30:12   0.0
8       3     13  2017-08-08 16:40:31   0.0

然后选择要显示的行(所有行与有变化的行具有相同的时间戳):

lst = df[ df['diff'] != 0. ]['Timestamp'].tolist()
df[ df['Timestamp'].isin(lst) ]

   Period  Value            Timestamp  diff
0       1     73  2017-08-10 16:44:23   0.0
3       2     50  2017-08-10 16:44:23   5.0
6       3     13  2017-08-10 16:44:23   0.0

【讨论】:

  • 是的。想要 3 行。
  • @Windstorm1981 好的,我编辑了。我想我现在明白了
猜你喜欢
  • 2022-07-19
  • 2023-01-31
  • 1970-01-01
  • 2018-02-02
  • 2016-05-10
  • 2019-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多