You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas统计列值出现频率并新增百分比占比列实现同表输出的方法

实现方法

你可以直接将两次统计得到的带相同多重索引的Series合并为同一个DataFrame,不需要分开计算两次groupby操作,代码如下:

# 先计算分组计数
count_ser = df_telco.groupby("PhoneService")["Churn"].value_counts()
# 基于计数直接计算同分组占比,不需要二次分组统计
prop_ser = (count_ser / count_ser.groupby(level=0).transform('sum') * 100).round(2).astype(str) + ' %'
# 合并两个序列为DataFrame,指定列名
res_df = pd.concat([count_ser, prop_ser], axis=1, keys=['count', 'proportion'])

如果你需要把PhoneService、Churn两个索引列转为普通列、取消合并单元格样式的展示,在代码最后加一句res_df = res_df.reset_index()即可。

另外也可以用crosstab接口一步完成统计,写法更简洁:

res_df = pd.crosstab(
    index=[df_telco['PhoneService'], df_telco['Churn']],
    columns='count'
).assign(
    proportion=lambda x: (x['count']/x.groupby(level=0)['count'].transform('sum')*100).round(2).astype(str)+' %'
)

两种方法输出的结果都和你期望的表结构完全一致。

内容的提问来源于stack exchange,提问作者Ataul Morshed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:54:04