【发布时间】:2019-10-03 12:44:47
【问题描述】:
我有一个数据集 available here
它给了我们一个DataFrame 赞
df=pd.read_csv('https://raw.githubusercontent.com/justmarkham/DAT8/master/data/u.user', sep='|')
df.head()
user_id age gender occupation zip_code
1 24 M technician 85711
2 53 F other 94043
3 23 M writer 32067
4 24 M technician 43537
5 33 F other 15213
我想知道每个occupation中的男女比例是多少
我已经使用了下面给定的函数,但这不是最优化的方法。
df.groupby(['occupation', 'gender']).agg({'gender':'count'}).div(df.groupby('occupation').agg('count'), level='occupation')['gender']*100
这给了我们类似的结果
occupation gender
administrator F 45.569620
M 54.430380
artist F 46.428571
M 53.571429
上面的答案是一个非常不同的格式,因为我想要这样的东西:(演示)
occupation M:F
programmer 2:3
farmer 7:2
谁能告诉我如何制作自己的聚合函数?
【问题讨论】:
-
你可以在函数末尾添加
unstack(df.groupby(["occupation", "gender"]).agg({"gender": "count"}).div( df.groupby("occupation").agg("count"), level="occupation" ).unstack('gender')["gender"] * 100)但我不明白你是如何得到 2:3 和 7:2 的? -
这是我要实现的处理。它不必是 2:3,但可以是 0.5 或 [30/70] 或 。什么都行。
-
其他人也打败了我吧,祝你好运,我认为 Quang 的回答很中肯。
标签: python pandas dataframe pandas-groupby