【问题标题】:Compare row values in Pandas Dataframe over using time delta使用时间增量比较 Pandas Dataframe 中的行值
【发布时间】:2016-05-02 07:02:17
【问题描述】:

我试图比较时间间隔内的行数据,而不是行迭代。即我想将一个值与'X'分钟前的可比较值进行比较。

我的数据框中的每一行都不是标准化的时间增量。

具体来说,我想将此子集数据帧中的 heading 值与 2 分钟前的值进行比较。

我尝试了一些方法,例如 timedeltas 和 .shift() 方法,但到目前为止没有任何乐趣,我自己也很困惑。任何想法或帮助将不胜感激。

index                heading               times
2015-12-09 03:00:01      NaN 2015-12-09 03:00:01
2015-12-09 03:01:07   231.12 2015-12-09 03:01:07
2015-12-09 03:01:08     0.00 2015-12-09 03:01:08
2015-12-09 03:01:10    90.00 2015-12-09 03:01:10
2015-12-09 03:01:15    90.00 2015-12-09 03:01:15
2015-12-09 03:02:22   149.23 2015-12-09 03:02:22
2015-12-09 03:02:25     0.00 2015-12-09 03:02:25
2015-12-09 03:02:32   270.00 2015-12-09 03:02:32
2015-12-09 03:02:40      NaN 2015-12-09 03:02:40
2015-12-09 03:02:42    90.00 2015-12-09 03:02:42
2015-12-09 03:02:48   270.00 2015-12-09 03:02:48
2015-12-09 03:03:15     9.39 2015-12-09 03:03:15
2015-12-09 03:03:17   210.77 2015-12-09 03:03:17
2015-12-09 03:03:35   153.61 2015-12-09 03:03:35
2015-12-09 03:03:39    90.00 2015-12-09 03:03:39
2015-12-09 03:03:40   263.84 2015-12-09 03:03:40
2015-12-09 03:03:46   351.30 2015-12-09 03:03:46
2015-12-09 03:03:48   270.00 2015-12-09 03:03:48
2015-12-09 03:03:50   267.69 2015-12-09 03:03:50
2015-12-09 03:03:51   270.00 2015-12-09 03:03:51
2015-12-09 03:04:10   205.03 2015-12-09 03:04:10
2015-12-09 03:04:11    90.00 2015-12-09 03:04:11
2015-12-09 03:04:12   270.00 2015-12-09 03:04:12
2015-12-09 03:04:18      NaN 2015-12-09 03:04:18
2015-12-09 03:04:24     0.00 2015-12-09 03:04:24

【问题讨论】:

  • 2 分钟前,你的意思是 120 秒前?
  • @Stefan,我的意思是将航向值与尽可能接近 2 分钟前的值进行比较,而不必正好是 120 秒

标签: python pandas


【解决方案1】:

我一直在使用以下(2 分钟的差异):

def diff(ref):
    refvalue = ref['heading']
    selection = data.index - ref.name == np.timedelta64(2, 'm')
    values = data['heading'].loc[selection] - refvalue
    return values.mean()

data['diff'] = data.apply(diff, axis=1)

但这不是很有效,因为它进行了 O(n^2) 比较。例如,可以跳过一半的条目,因为它们是未来的。

我希望有人能提出更好的建议。

【讨论】:

    【解决方案2】:

    这可以通过reindex 函数实现,请参阅

    Shifting row by delta time in Pandas

    https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.reindex.html

    也许你想要 method='nearest'。

    【讨论】:

      猜你喜欢
      • 2017-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      • 2020-12-17
      • 1970-01-01
      • 2021-09-19
      相关资源
      最近更新 更多