首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何对大熊猫重新采样以适应水文年(9月1日至8月31日)

如何对大熊猫重新采样以适应水文年(9月1日至8月31日)
EN

Stack Overflow用户
提问于 2021-09-03 13:42:18
回答 2查看 48关注 0票数 1

我想按水文年份分析一些每日数据:从9月1日到8月31日。我用以下命令创建了一个合成数据集:

代码语言:javascript
运行
复制
import pandas as pd

t = pd.date_range(start='2015-01-01', freq='D', end='2021-09-03')
df = pd.DataFrame(index = t)

df['hydro_year'] = df.index.year
df['hydro_year'].loc[df.index.month >= 9] += 1

df['id'] = df['hydro_year'] - df.index.year[0]
df['count'] = 1

请注意,实际上我没有hydro_year列,所以我没有使用groupby。我预计以下数据将按水文年份重新采样:

代码语言:javascript
运行
复制
print(df['2015-09-01':].resample('12M').agg({'hydro_year':'mean','id':'mean','count':'sum'}))

但是输出不对齐:

代码语言:javascript
运行
复制
|                     | hydro_year |      id | count |
|---------------------+------------+---------+-------|
| 2015-09-30 00:00:00 |       2016 |       1 |    30 |
| 2016-09-30 00:00:00 |    2016.08 | 1.08197 |   366 |
| 2017-09-30 00:00:00 |    2017.08 | 2.08219 |   365 |
| 2018-09-30 00:00:00 |    2018.08 | 3.08219 |   365 |
| 2019-09-30 00:00:00 |    2019.08 | 4.08219 |   365 |
| 2020-09-30 00:00:00 |    2020.08 | 5.08197 |   366 |
| 2021-09-30 00:00:00 |    2021.01 | 6.00888 |   338 |

然而,如果我提前一天开始,那么事情就会变得一致,除了第一天是“早”的和孤单的摇摆……

代码语言:javascript
运行
复制
|                     | hydro_year | id | count |
|---------------------+------------+----+-------|
| 2015-08-31 00:00:00 |       2015 |  0 |     1 |
| 2016-08-31 00:00:00 |       2016 |  1 |   366 |
| 2017-08-31 00:00:00 |       2017 |  2 |   365 |
| 2018-08-31 00:00:00 |       2018 |  3 |   365 |
| 2019-08-31 00:00:00 |       2019 |  4 |   365 |
| 2020-08-31 00:00:00 |       2020 |  5 |   366 |
| 2021-08-31 00:00:00 |       2021 |  6 |   365 |
| 2022-08-31 00:00:00 |       2022 |  7 |     3 |
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-03 13:51:18

我们可以每年尝试Anchored Offsets,从SEP开始:

代码语言:javascript
运行
复制
resampled_df = df['2015-09-01':].resample('AS-SEP').agg({
    'hydro_year': 'mean', 'id': 'mean', 'count': 'sum'
})
代码语言:javascript
运行
复制
            hydro_year   id  count
2015-09-01      2016.0  1.0    366
2016-09-01      2017.0  2.0    365
2017-09-01      2018.0  3.0    365
2018-09-01      2019.0  4.0    365
2019-09-01      2020.0  5.0    366
2020-09-01      2021.0  6.0    365
2021-09-01      2022.0  7.0      3
票数 1
EN

Stack Overflow用户

发布于 2021-09-03 13:48:23

IIUC,您可以使用12MS (Start)代替12M

代码语言:javascript
运行
复制
>>> df['2015-09-01':].resample('12MS') \
                     .agg({'hydro_year':'mean','id':'mean','count':'sum'})

            hydro_year   id  count
2015-09-01      2016.0  1.0    366
2016-09-01      2017.0  2.0    365
2017-09-01      2018.0  3.0    365
2018-09-01      2019.0  4.0    365
2019-09-01      2020.0  5.0    366
2020-09-01      2021.0  6.0    365
2021-09-01      2022.0  7.0      3
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69045925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档