我有一个名为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
我需要进行循环,因为我有很多数据帧,我无法弄清问题,任何帮助都将不胜感激。
答案 0 :(得分:0)
请检查年,月组合是否在不同的数据框中重复,这可能是重复的原因。
在您的情况下,最好收集另一个数据帧中每个数据帧的groupby.mean结果,然后在新数据帧上再次进行groupby意思
答案 1 :(得分:0)
您可以尝试以下方法吗?
main_df = pd.DataFrame()
for i in range(22):
main_df = pd.concat([main_df, c[i].groupby(['year','month']).mean().reset_index()])
print(main_df.groupby(['year','month']).mean())
答案 2 :(得分:0)
我看不出您的代码失败的原因。我在下面尝试过并获得了所需的结果:
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])