我正在使用的数据集将年份分为几个季度。我想获得每个特定国家/地区每年的平均受教育率。
在我看来,它看起来像是:如果年份是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
我将非常感谢任何提示/建议!
谢谢。
答案 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')