pandas中,df.groupby和df[columns].groupby结合pd.cut在sum()和count()时候的妙用

很多帖子都在讲df.groupby,对df[columns].groupby介绍很少,我今天恰好用到,总结以下。特别针对某一列是二分类的,要计算占比的时候,简直太方便了。举例数据a中第0列的0和1分别代表女性和男性。

import pandas as pd
a = [[1, 22], [0, 15], [0, 21], [0, 23], [1, 17], [0, 32], [1, 39], [1, 30]]
data = pd.DataFrame(a, columns=['sex', 'age'])
print(data.groupby('sex')['age'].count())
print(data.groupby('sex')['age'].sum())

执行的结果很好理解。

sex
0    4
1    4
Name: age, dtype: int64
sex
0     91
1    108
Name: age, dtype: int64

 

我的需求是,男性在不同年龄段的占比。为了装B,两行代码搞掂(正规作业可不能这么做)。

cut_bins = pd.cut(data['age'], [0, 20, 40])
male_rate = data['sex'].groupby(cut_bins).sum() / data['sex'].groupby(cut_bins).count()

输出

age
(0, 20]     0.5
(20, 40]    0.5
Name: sex, dtype: float64

理解:

count() 计算出不同年龄段的总次数。当然,分母替换为 cut_bins.value_counts() 也是更容易理解的,这里只是为了对比。

sum() 求和计算,因为女性是0,所以求和的结果恰好是男性出现的次数。

 

 

你可能感兴趣的:(pandas中,df.groupby和df[columns].groupby结合pd.cut在sum()和count()时候的妙用)