gpt4 book ai didi

python - 对这个数据帧进行下采样我哪里出了问题?

转载 作者:行者123 更新时间:2023-12-01 06:37:53 26 4
gpt4 key购买 nike

我有两个数据框。

其中列出了 24 小时内特定值( actualforecast )的 30 分钟观测值(48 个观测值):

> api_df.head()

from to actual forecast index
0 2019-11-24T23:30Z 2019-11-25T00:00Z 200 210 moderate
1 2019-11-25T00:00Z 2019-11-25T00:30Z 200 199 moderate
2 2019-11-25T00:30Z 2019-11-25T01:00Z 198 200 moderate
3 2019-11-25T01:00Z 2019-11-25T01:30Z 189 204 moderate
4 2019-11-25T01:30Z 2019-11-25T02:00Z 191 199 moderate

另一个是一整天对另一个值 ( KW ) 的观察:

> csv_extr.head()

Date Time KW
3764 2019-11-25 13:45:26.1050000 -424.437988
2911 2019-11-25 16:41:12.4040000 -465.325989
1786 2019-11-25 13:06:54.0290000 -431.795013
4352 2019-11-25 18:42:19.9360000 -452.528992
4634 2019-11-25 19:35:19.9230000 -457.210999

我想要csv_extr类似于api_df尽可能接近,所以我决定对其进行下采样,最终得到的东西几乎就是我正在寻找的东西,但有一些明显的问题,即 Time值和NaN观察结果:

> x.head()

Date Time KW time
0 2019-11-25 00:00:01.6470000 -100.0 0
1 NaN NaN NaN 0
2 NaN NaN NaN 1
3 2019-11-25 01:57:04.7700000 0.0 0
4 NaN NaN NaN 2

我已经寻找了可能的原因,并且我只能假设这些结果的发生是因为 Time设置为小数点后七位,因此由于某种原因导致输出无法与 30 分钟 block 完全对齐。

我使用网上找到的一些代码实现了最终输出( x ),但我找不到关于代码到底在做什么的解释,并且还希望在这里得到一些指导:

t = pd.to_timedelta(csv_extr.Time, unit = "min")
s = csv_extr.set_index(t).resample('30min').last().reset_index(drop = True)
x = s.assign(time = s.groupby("Time").cumcount())

运行此代码段时会出现一个错误通知,即:

ValueError: only leading negative signs are allowed

和以前一样,我一直在寻找这可能意味着什么,但尚未找到任何可以清楚解释它的内容。

我很乐意提供用于代表目的的数据;我还没有提供任何内容的原因是我不清楚在 Python/pandas 中执行此操作的最佳方法(这里的一些指导会很好)。另外,我希望解决方案是由比我更有经验的 Python 用户来查看代码并发现一些明显的东西。否则,我很乐意提供代表所需的数据。

最佳答案

您将“时间”转换为时间增量,但对我来说它看起来像时间戳,所以我认为您需要pd.to_datetime,这就是我为获得数据的以下近似值所做的。我还将索引设置为新的“DateTime”列并删除旧列:

csv_extr['DateTime'] = pd.to_datetime(csv_extr.Date + ' ' + csv_extr.Time)

csv_extr = csv_extr[['KW','DateTime']].set_index('DateTime')

KW
DateTime
2019-11-25 13:45:26.105 -424.437988
2019-11-25 16:41:12.404 -465.325989
2019-11-25 13:06:54.029 -431.795013
2019-11-25 18:42:19.936 -452.528992
2019-11-25 19:35:19.923 -457.210999

之后就很简单了。我将在此处展示 60 分钟重采样,以使输出更加紧凑,但当然,它对于 30 分钟采样的工作原理是相同的:

csv_extr.resample('60 min').last()

KW
DateTime
2019-11-25 13:00:00 -424.437988
2019-11-25 14:00:00 NaN
2019-11-25 15:00:00 NaN
2019-11-25 16:00:00 -465.325989
2019-11-25 17:00:00 NaN
2019-11-25 18:00:00 -452.528992
2019-11-25 19:00:00 -457.210999

我假设您想填写那里缺失的值。在不了解更多关于您的数据的情况下,我建议使用如下简单的线性插值(但如果您想要更复杂的东西,pandas 和 numpy 有很多其他选项):

csv_extr.resample('60 min').last().interpolate()

KW
DateTime
2019-11-25 13:00:00 -424.437988
2019-11-25 14:00:00 -438.067322
2019-11-25 15:00:00 -451.696655
2019-11-25 16:00:00 -465.325989
2019-11-25 17:00:00 -458.927490
2019-11-25 18:00:00 -452.528992
2019-11-25 19:00:00 -457.210999

关于python - 对这个数据帧进行下采样我哪里出了问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59586749/

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