python - 如何将 DataFrame 移动到最接近指定时间索引的时间索引?

标签 python pandas dataframe shift

我有一个记录值的 DataFrame,索引设置为 DatetimeIndex。大约每 15 分钟记录一个值。

我想添加一个新列,该列是当前值与 24 小时前值的分数差。由于这些值大约每十五分钟记录一次,因此我想切换到最接近 24 小时之前的时间索引。如果我尝试准确地做到这一点,我最终会得到很多 NaN:

df["value"] / df["value"].shift(freq = datetime.timedelta(days = -1))

应该如何进行此转换,以便转换到最接近指定时间索引的时间索引?有没有其他更简单的方法来思考这个问题?

下面是一个说明该问题的示例:

df = pd.DataFrame(
    [
        [pd.Timestamp("2015-07-18 13:53:33.280"), 10],
        [pd.Timestamp("2015-07-19 13:54:03.330"), 20],
        [pd.Timestamp("2015-07-20 13:52:13.350"), 30],
        [pd.Timestamp("2015-07-21 13:56:03.126"), 40],
        [pd.Timestamp("2015-07-22 13:53:51.747"), 50],
        [pd.Timestamp("2015-07-23 13:53:29.346"), 60]
    ],
    columns = [
        "datetime",
        "value"
    ]
)

df.index = df["datetime"]
del df["datetime"]
df.index = pd.to_datetime(df.index.values)

df["change"] = df["value"] / df["value"].shift(freq = datetime.timedelta(days = -1))

最佳答案

我会向索引添加一天,然后将 pd.DataFrame.reindexmethod='nearest' 结合使用

df / df.set_index(df.index + pd.offsets.Day()).reindex(df.index, method='nearest')

                            value
2015-07-18 13:53:33.280  1.000000
2015-07-19 13:54:03.330  2.000000
2015-07-20 13:52:13.350  1.500000
2015-07-21 13:56:03.126  1.333333
2015-07-22 13:53:51.747  1.250000
2015-07-23 13:53:29.346  1.200000
<小时/>

您可以提供另一个偏移量作为 method='nearest'

的容差
df / df.set_index(df.index + pd.offsets.Day()).reindex(
    df.index, method='nearest', tolerance=pd.offsets.Hour(12))

                            value
2015-07-18 13:53:33.280       NaN
2015-07-19 13:54:03.330  2.000000
2015-07-20 13:52:13.350  1.500000
2015-07-21 13:56:03.126  1.333333
2015-07-22 13:53:51.747  1.250000
2015-07-23 13:53:29.346  1.200000

关于python - 如何将 DataFrame 移动到最接近指定时间索引的时间索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46636772/

相关文章:

python - 使用 Django Rest Framework 在 Heroku 中使用 TemplateDoesNotExist

python - Django 使用 .extra() 仅查询模型的一个字段,而不使用 .defer() 或 .only()

python - Pandas,如何按日期重新排序

Python:向 pandas 数据框添加一列

Python 数据帧 : One-Hot Encode Rows Containing a Specific Substring

python - 转换小数点分隔符

python - 创建/模仿不可变内置类型的可变子类

python - 获取可能路径的 MxN 网格(矩阵)问题

python - 使用 `.loc` 访问多索引数据帧时如何保留列顺序?

python - pandas 数据框中带有附加问题的时间序列