【问题标题】:How to find the difference between each subsequent pair of DataFrame.index values in pandas?如何找到熊猫中每对后续 DataFrame.index 值之间的差异?
【发布时间】:2015-04-06 21:50:54
【问题描述】:

为了处理一些数据,我创建了一个DataFrame,我想找出DataFrame中每对数据之间的时间差异。在使用 pandas 之前,我使用了两个 numpy 数组,一个描述数据,另一个描述时间(datetime.datetimes 的数组)。使用数组中的数据,我可以执行timearray[1:] - timearray[:-1],从而生成一个数组(包含 n-1 个元素),描述每对数据之间的时间间隔。

在 pandas 中,执行 DataFrame.index[1] - DataFrame.index[0] 可以得到我想要的结果——我选择的两个索引之间的时间差。但是,执行DataFrame.index[1:] - DataFrame.index[:-1] 不会产生类似结果的数组,而是简单地等于DataFrame.index[-1]。为什么会这样,如何在 pandas 中复制 numpy 行为?

或者,在 pandas 的 DataFrame 中查找数据间隙的最佳方法是什么?

【问题讨论】:

    标签: python python-2.7 numpy pandas


    【解决方案1】:

    您可以使用 shift 来偏移日期并使用它来计算行之间的差异。

    # create dummy data
    import pandas as pd
    rng = pd.date_range('1/1/2011', periods=90, freq='h')
    # shift a copy of the date column and subtract from the original date
    df = pd.DataFrame({'value':range(1,91),'date':rng})
    df['time_gap'] = df['date']- df['date'].shift(1)
    

    要使用此功能,可以使用.reset_index().set_index('date') 将日期列临时返回到索引中,从而将您的索引临时设置为列。

    【讨论】:

    • 所以我尝试做timeDelta = df.index - df.index.shift(1) 并生成ValueError: Cannot shift with no offset。然后我尝试了timeDelta = df.reset_index()['index'] - df.reset_index()['index'].shift(1),效果很好,谢谢!
    猜你喜欢
    • 2017-09-07
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 2021-11-09
    • 2017-06-22
    • 2020-12-02
    • 2017-03-21
    • 2019-01-03
    相关资源
    最近更新 更多