对时间序列数据进行重采样,向前求平均值 pandas

发布于 2025-01-10 19:51:20 字数 1220 浏览 0 评论 0原文

我的 df 数据如下所示。


    ts                        Values
    2021-01-01 09:00:00+00:00   0.00
    2021-01-01 09:10:00+00:00   0.01
    2021-01-01 09:20:00+00:00   0.03
    2021-01-01 09:30:00+00:00   0.07
    2021-01-01 09:40:00+00:00   0.09
    2021-01-01 09:50:00+00:00   0.14
    2021-01-01 10:00:00+00:00   0.12
    2021-01-01 10:10:00+00:00   0.14
    2021-01-01 10:20:00+00:00   0.18
    2021-01-01 10:30:00+00:00   0.16
    2021-01-01 10:40:00+00:00   0.14
    2021-01-01 10:50:00+00:00   0.21
    2021-01-01 11:00:00+00:00   0.16

我用于重采样的代码是:

    df = round(df.resample('1H').mean(), 2).fillna(0)

这里 fillna 用于向前填充空单元格。所以没什么大不了的。 当我运行此代码时,我的输出如下所示:


    ts                        Values
    2021-01-01 09:00:00+00:00   0.06
    2021-01-01 10:00:00+00:00   0.16
    2021-01-01 11:00:00+00:00   0.16
    2021-01-01 12:00:00+00:00   0.07

我真正想要的是获取 09:00 到 09:50 之间的值和日期,并写入与 10:00 相对应的值。但默认如09:00到09:50计算为09:00。我想要 10:00 的这个。

预期输出是:


       ts                       Values
    2021-01-01 10:00:00+00:00   0.06
    2021-01-01 11:00:00+00:00   0.16
    2021-01-01 12:00:00+00:00   0.16

My df data is like below.


    ts                        Values
    2021-01-01 09:00:00+00:00   0.00
    2021-01-01 09:10:00+00:00   0.01
    2021-01-01 09:20:00+00:00   0.03
    2021-01-01 09:30:00+00:00   0.07
    2021-01-01 09:40:00+00:00   0.09
    2021-01-01 09:50:00+00:00   0.14
    2021-01-01 10:00:00+00:00   0.12
    2021-01-01 10:10:00+00:00   0.14
    2021-01-01 10:20:00+00:00   0.18
    2021-01-01 10:30:00+00:00   0.16
    2021-01-01 10:40:00+00:00   0.14
    2021-01-01 10:50:00+00:00   0.21
    2021-01-01 11:00:00+00:00   0.16

My code is for resampling is:

    df = round(df.resample('1H').mean(), 2).fillna(0)

Here fillna is for filling empty cells forward. So not a big deal.
When I run this code, my output is like below:


    ts                        Values
    2021-01-01 09:00:00+00:00   0.06
    2021-01-01 10:00:00+00:00   0.16
    2021-01-01 11:00:00+00:00   0.16
    2021-01-01 12:00:00+00:00   0.07

What I actually want is that take values and date from 09:00 to 09:50 and write the values corresponding to 10:00. But the default is like 09:00 to 09:50 is calculated as 09:00. I want this at 10:00.

The expected output is:


       ts                       Values
    2021-01-01 10:00:00+00:00   0.06
    2021-01-01 11:00:00+00:00   0.16
    2021-01-01 12:00:00+00:00   0.16

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

北方的韩爷 2025-01-17 19:51:20

您可以使用:

df['Values'].groupby(df.index.ceil('H')).mean()

输出:

ts
2021-01-01 09:00:00+00:00    0.000000
2021-01-01 10:00:00+00:00    0.076667
2021-01-01 11:00:00+00:00    0.165000
Name: Values, dtype: float64

或者将 09:00 视为 10:00:

df['Values'].groupby(df.index.floor('H')+pd.Timedelta('1h')).mean()

输出:

ts
2021-01-01 10:00:00+00:00    0.056667
2021-01-01 11:00:00+00:00    0.158333
2021-01-01 12:00:00+00:00    0.160000
Name: Values, dtype: float64

You can use:

df['Values'].groupby(df.index.ceil('H')).mean()

output:

ts
2021-01-01 09:00:00+00:00    0.000000
2021-01-01 10:00:00+00:00    0.076667
2021-01-01 11:00:00+00:00    0.165000
Name: Values, dtype: float64

Or to consider 09:00 to be 10:00:

df['Values'].groupby(df.index.floor('H')+pd.Timedelta('1h')).mean()

output:

ts
2021-01-01 10:00:00+00:00    0.056667
2021-01-01 11:00:00+00:00    0.158333
2021-01-01 12:00:00+00:00    0.160000
Name: Values, dtype: float64
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文