首页 > 解决方案 > 如何在python中用总大小划分组的每个值?

问题描述

我在“质量”、“价格”、“时间”列中有一个带有是/否答案的数据框。

我转换为 1 和 0 并分组

grouped = df.group.by(['country'])[['quality','price','time']].sum()只得到“是”的答案,结果是:

国家 质量 价格 时间
法国 5 4 3
德国 3 2 6
英国 2 1 4

我想知道如何将每个国家/地区受访者的大小(总共 N 个)中的每个值划分为 groupby,在我的情况下,FRANCE = 9,GERMANY = 11,UK = 12。

我知道我可以选择单个组并对其进行操作: france = country_split.loc[['FRANCE']]

(france/9)*100

但是有可能一次性为整个集团做手术吗?

标签: pythonpandasdataframegroup-by

解决方案


在 aggregate 之后用于Series.value_counts列的计数和除值sum,然后乘以100

#if need dict for counts
#s = {'FRANCE': 9, 'GERMANY': 11, 'UK': 12}

s = df['country'].value_counts()

grouped = df.groupby(['country'])[['quality','price','time']].sum().div(s, axis=0).mul(100)
print (grouped)
           quality      price       time
country                                 
FRANCE   55.555556  44.444444  33.333333
GERMANY  27.272727  18.181818  54.545455
UK       16.666667   8.333333  33.333333

mean未经测试,但可能的解决方案应该是聚合的sum

grouped = df.groupby(['country'])[['quality','price','time']].mean()

推荐阅读