Pandas groupby实操:基于tips数据集在同表中同时获取count与占比
推荐实现方法
你可以用链式写法一次完成分组、统计、新增百分比列的操作,仅需一次groupby计算,比原来两次分组的写法性能更高,代码也更简洁:
import pandas as pd import seaborn as sns # 加载数据 tips = sns.load_dataset('tips') # 一步得到预期结果 res = ( tips.groupby(['time', 'smoker']) .agg(count=('smoker', 'count')) # 统计分组计数,命名为count列 .assign(percentage=lambda x: x['count'] / x['count'].sum() * 100) # 计算该分组占总样本的百分比 ) print(res)
运行后输出的结果和你要求的格式完全一致。
更简化的写法(适用于pandas 1.1.0及以上版本)
你还可以直接用value_counts方法实现,代码更短:
count = tips.value_counts(['time', 'smoker']).sort_index() res = pd.DataFrame({ 'count': count, 'percentage': count / count.sum() * 100 })
性能说明
两种写法都只执行了一次分组统计,相比你原来两次调用groupby的实现,在数据量较大的场景下性能提升会更明显。
内容的提问来源于stack exchange,提问作者Roy
相关产品推荐
相关产品推荐

