python - groupby().mean() 在 for 循环下不起作用
问题描述
我有一个名为 c 的字典,其中对象作为数据框,每个数据框有 3 列: 'year' 'month' & 'Tmed' ,我想计算 Tmed 每年的月平均值,我用
for i in range(22) : c[i].groupby(['year','month']).mean().reset_index()
这返回
year month Tmed
0 2018 12 14.8
2 2018 12 12.0
3 2018 11 16.1
5 2018 11 9.8
6 2018 11 9.8
9 2018 11 9.3
4425 rows × 3 columns
索引不是应有的,例如,对于 2018 年的第 11 个月,应该只有一行,但如您所见,数据框不止一行。
我在单个数据帧上尝试了代码,它给出了想要的结果:
c[3].groupby(['year','month']).mean().reset_index()
year month Tmed
0 1999 9 23.950000
1 1999 10 19.800000
2 1999 11 12.676000
3 1999 12 11.012000
4 2000 1 9.114286
5 2000 2 12.442308
6 2000 3 13.403704
7 2000 4 13.803846
8 2000 5 17.820000
.
.
.
218 2018 6 21.093103
219 2018 7 24.977419
220 2018 8 26.393103
221 2018 9 24.263333
222 2018 10 19.069565
223 2018 11 13.444444
224 2018 12 13.400000
225 rows × 3 columns
我需要放 for 循环,因为我有很多数据框,我无法解决问题,任何帮助将不胜感激。
解决方案
我看不出您的代码应该失败的原因。我在下面尝试并得到了所需的结果:
import numpy as np
import pandas as pd
def getRandomDataframe():
rand_year = pd.DataFrame(np.random.randint(2010, 2011,size=(50, 1)), columns=list('y'))
rand_month = pd.DataFrame(np.random.randint(1, 13,size=(50, 1)), columns=list('m'))
rand_value = pd.DataFrame(np.random.randint(0, 100,size=(50, 1)), columns=list('v'))
df = pd.DataFrame(columns=['year', 'month', 'value'])
df['year'] = rand_year
df['month'] = rand_month
df['value'] = rand_value
return df
def createDataFrameDictionary():
_dict = {}
length = 3
for i in range(length):
_dict[i] = getRandomDataframe()
return _dict
c = createDataFrameDictionary()
for i in range(3):
c[i] = c[i].groupby(['year','month'])['value'].mean().reset_index()
# Check results
print(c[0])
推荐阅读
- sql - 如何在 Laravel Query Builder 中实现 union all 和 Group by?
- amp-html - amp-form 表单提交失败:错误:HTTP 错误 406
- javascript - 我怎样才能在这种链接上添加一个请稍候的电话
- openshift - Openshift OKD 过多的日志记录
- c++ - 为什么向量化使用浮点数比使用双精度数更有效?
- ocaml - Opam 可以安装最新的软件包并告诉'Already up-to-date'?
- c - C 中是否有一个函数可以在 Linux 上获取当前进程的虚拟运行时?
- php - 计算按列分组的模式
- c - 为什么我的 const 值会改变它的值?(C)
- reactjs - 我想在反应中显示加载