熊猫-取同年的平均值,但年份分为几个季度

时间:2020-06-25 14:44:47

标签: python pandas

我正在使用的数据集将年份分为几个季度。我想获得每个特定国家/地区每年的平均受教育率。

在我看来,它看起来像是:如果年份是1999.xx,则意味着(受过教育)。

数据如下:

Country     Year      Educ Rate
USA         1999.00   95
USA         1999.25   96
USA         1999.50   97
USA         1999.75   95
USA         2000.00   99
Argentina   1999.00   88
Argentina   1999.25   86
Argentina   1999.50   88
Argentina   1999.75   89
Argentina   2000.00   90

我将非常感谢任何提示/建议!

谢谢。

2 个答案:

答案 0 :(得分:1)

一种方法是使用.apply(math.floor)将年份四舍五入。此后,您可以按国家和年份分组并按均值进行汇总。

df = pd.DataFrame(data=[['USA', 1999.0, 95],
                        ['USA', 1999.25, 96],
                        ['USA', 1999.5, 97],
                        ['USA', 1999.75, 95],
                        ['USA', 2000.0, 99],
                        ['Argentina', 1999.0, 88],
                        ['Argentina', 1999.25, 86],
                        ['Argentina', 1999.5, 88],
                        ['Argentina', 1999.75, 89],
                        ['Argentina', 2000.0, 90],
                       ],
                  columns=['Country', 'Year', 'Educ_rate'])
# round year down
df['Year'] = (df['Year']).apply(math.floor)

# aggregate means
df_agg = df.groupby(['Country', 'Year']).agg('mean')

会给:

# print(df_agg)
                Educ_rate
Country   Year           
Argentina 1999      87.75
          2000      90.00
USA       1999      95.75
          2000      99.00

答案 1 :(得分:0)

您需要使用“。”分隔。然后按年份和国家分组

    tmp = pd.DataFrame({'a': [1,1,2,2,1,1,2,2,1,2],
     'b': ['2015.00','2015.00', '2015.25', '2015.50', '2016.00','2016.00', '2016.25', '2016.50',
           '2017.00', '2017.00'],
     'c': [2,3,4,5,7,3,4,5,3,2]})

    tmp['year'] = tmp['b'].apply(lambda x: x.split('.')[0])
    tmp['mean'] = tmp.groupby(['a', 'year'])['c'].transform('mean')