gpt4 book ai didi

python - 如何在 Pandas 数据框中找到不同日期的一天中的小时数之间的差异?

转载 作者:太空狗 更新时间:2023-10-30 01:56:46 25 4
gpt4 key购买 nike

对于没有缺失值的数据框,这就像 df.diff(periods=24, axis=0) 一样简单。但是如何将计算与索引值联系起来呢?


可重现数据框 - 代码:

# Imports
import pandas as pd
import numpy as np

# A dataframe with two variables, random numbers and hourly time series
np.random.seed(123)
rows = 36
rng = pd.date_range('1/1/2017', periods=rows, freq='H')
df = pd.DataFrame(np.random.randint(100,150,size=(rows, 2)), columns=['A', 'B'])
df = df.set_index(rng)

可重现的数据框 - 截图:

enter image description here

所需的输出 - 代码:

# Running difference step = 24
df = df.diff(periods=24, axis=0)
df = df.dropna(axis=0, how='all')

所需的输出 - 屏幕截图

enter image description here

真正的挑战

问题是我的真实示例中充满了缺失值。所以我必须将差异区间与索引值联系起来,但我不知道如何做。我已经尝试了一些解决方案,首先在索引中填充缺失的小时数,然后像以前一样运行差异,但它不是很优雅。

感谢您的任何建议!

编辑 - 根据评论中的要求,这是我对更长一段时间的最佳尝试:

df_missing = df.drop(df.index[[2,3]])
newIndex = pd.date_range(start = '1/1/2017', end = '1/3/2017', freq='H')
df_missing = df_missing.reindex(newIndex, fill_value = np.nan)
df_refilled = df_missing.diff(periods=24, axis=0)

与其他建议相比,我会说这不是很优雅 =)

最佳答案

我想也许你可以使用 groupby

df.groupby(df.index.hour).diff().dropna()
Out[784]:
A B
2017-01-02 00:00:00 -3.0 3.0
2017-01-02 01:00:00 -28.0 -23.0
2017-01-02 02:00:00 -4.0 -7.0
2017-01-02 03:00:00 3.0 -29.0
2017-01-02 04:00:00 -4.0 3.0
2017-01-02 05:00:00 -17.0 -6.0
2017-01-02 06:00:00 -20.0 35.0
2017-01-02 07:00:00 -2.0 -40.0
2017-01-02 08:00:00 13.0 -21.0
2017-01-02 09:00:00 -9.0 -13.0
2017-01-02 10:00:00 0.0 3.0
2017-01-02 11:00:00 -21.0 -9.0

关于python - 如何在 Pandas 数据框中找到不同日期的一天中的小时数之间的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48449264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com