pandas groupby by customized year, e.g. a school year(按定制年份(如学年)分组的 pandas )
本文介绍了按定制年份(如学年)分组的 pandas 的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在 pandas 数据框中,我希望找到按"自定义"年份分组的列的平均值。 例如,计算一个学年的平均分数(例如9月/YYYY至8月/YYYY+1)。 pandas 文档给出了一些关于补偿和业务年份等的信息,但我真的不能从这些信息中获得一个有效的例子。{##**$$}
这里是一个最小的示例,其中学校分数的平均值是每年(1-12月)计算的,这是我不想要的。
import pandas as pd
import numpy as np
df = pd.DataFrame(data=np.random.randint(low=1, high=5, size=36),
index=pd.date_range('2001-09-01', freq='M', periods=36),
columns=['marks'])
df_yearly = df.groupby(pd.Grouper(freq="A")).mean()
这可能会产生,例如:
print(df):
marks
2001-09-30 1
2001-10-31 4
2001-11-30 2
2001-12-31 1
2002-01-31 4
2002-02-28 1
2002-03-31 2
2002-04-30 1
2002-05-31 3
2002-06-30 3
2002-07-31 3
2002-08-31 3
2002-09-30 4
2002-10-31 1
...
2003-11-30 4
2003-12-31 2
2004-01-31 1
2004-02-29 2
2004-03-31 1
2004-04-30 3
2004-05-31 4
2004-06-30 2
2004-07-31 2
2004-08-31 4
print(df_yearly):
marks
2001-12-31 2.000000
2002-12-31 2.583333
2003-12-31 2.666667
2004-12-31 2.375000
我想要的输出将与以下内容相对应:
2001-09/2002-08 mean_value
2002-09/2003-08 mean_value
2003-09/2004-08 mean_value
非常感谢!
推荐答案
我们可以手动计算学年:
# if month>=9 we move it to the next year
school_years = df.index.year + (df.index.month>8).astype(int)
另一个选项是使用从9月份开始的会计年度:
school_years = df.index.to_period('Q-AUG').qyear
我们可以按以下方式分组:
df.groupby(school_years).mean()
输出:
marks
2002 2.333333
2003 2.500000
2004 2.500000
这篇关于按定制年份(如学年)分组的 pandas 的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:按定制年份(如学年)分组的 pandas
猜你喜欢
- 如何在 python3 中将 OrderedDict 转换为常规字典 2022-01-01
- padding='same' 转换为 PyTorch padding=# 2022-01-01
- python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令 2022-01-01
- 如何在 Python 的元组列表中对每个元组中的第一个值求和? 2022-01-01
- 如何将一个类的函数分成多个文件? 2022-01-01
- 使用Heroku上托管的Selenium登录Instagram时,找不到元素';用户名'; 2022-01-01
- 沿轴计算直方图 2022-01-01
- pytorch 中的自适应池是如何工作的? 2022-07-12
- python-m http.server 443--使用SSL? 2022-01-01
- 分析异常:路径不存在:dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data; 2022-01-01