groupby()。mean()在for循环下不起作用

时间:2019-04-02 11:08:31

标签: python

我有一个名为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

我需要进行循环,因为我有很多数据帧,我无法弄清问题,任何帮助都将不胜感激。

3 个答案:

答案 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])