【发布时间】:2021-11-27 20:33:11
【问题描述】:
我正在处理tips 数据集:
# Load the data
tips = sns.load_dataset("tips")
tips.head()
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
我想groupby time 和 smoker 列,然后计算每组中吸烟者的数量(包括他们的百分比)。我试图通过两个步骤来实现:
第 1 步:
# Count by groups
tips.groupby(['time', 'smoker']).agg({'smoker': 'count'})
smoker
time smoker
Lunch Yes 23
No 45
Dinner Yes 70
No 106
第 2 步:
# Count with percentage
tips.groupby(['time', 'smoker']).agg({'smoker': 'count'}).transform(lambda x: x/x.sum()*100)
smoker
time smoker
Lunch Yes 9.426230
No 18.442623
Dinner Yes 28.688525
No 43.442623
我在 2 个单独的表格中得到结果。我想在同一个表中获得count 和percentage。
期望的输出:
count percentage
time smoker
Lunch Yes 23 9.426230
No 45 18.442623
Dinner Yes 70 28.688525
No 106 43.442623
有没有更好的方法呢?任何建议,将不胜感激。谢谢!
【问题讨论】:
-
您能否扩展您的样本
df,以便我们可以匹配您的输出?对于您提供的示例,“时间”列中没有“午餐”。否则修改您的输出以匹配您的示例。 -
@not_speshal、'Lunch' 和 'Dinner' 是
time列的类。 -
明白了!我重新创建了一个虚拟数据集,并且能够匹配您所需的输出
标签: python pandas dataframe group-by