在《利用Python进行数据分析》第2章1880-2011年间全美婴儿姓名例子中,有一段代码:
def add_prop(group):
births = group.births.astype(float)
group['prop'] = births/births.sum()
return group
names = names.groupby(['year', 'sex']).apply(add_prop)
代码就几行,开始很难理解后来想通了。
一开始深陷误区,以为换成SQL语句形式:select year, sex, births/sum(births) from names group by year, sex; 那么结果形式应该是131*2行3列,计算的是每年男女性别各自占比,然而这段代码运行后输出却是1690784行5列:
Out[13]:
name sex births year prop
0 Mary F 7065 1880 0.077643
1 Anna F 2604 1880 0.028618
2 Emma F 2003 1880 0.022013
3 Elizabeth F 1939 1880 0.021309
4 Minnie F 1746 1880 0.019188
... .. ... ... ...
1690779 Zymaire M 5 2010 0.000003
1690