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

如何基于Pandas DataFrame统计各问题的回答占比?

统计Pandas DataFrame中各问题的选项占比

首先还原你提供的DataFrame:

import pandas as pd

# 构造示例数据
data = {
    "Do you smoke?": ["yes", "no", "sometimes", "no", "no", "yes"],
    "Do you exercise?": ["no", "yes", "yes", "yes", "no", "no"],
    "Do you sleep less than 8 hours?": ["sometimes", "no", "yes", "sometimes", "no", "yes"]
}
df = pd.DataFrame(data)

方法一:直接生成宽格式占比表

对DataFrame的每一列使用value_counts(normalize=True),直接得到该列各选项的占比,再转成百分比格式:

# 计算每列各选项的占比,转成百分比并保留两位小数
percentage_result = df.apply(
    lambda col: col.value_counts(normalize=True).mul(100).round(2)
)

print(percentage_result)

运行后输出结果:

Do you smoke?  Do you exercise?  Do you sleep less than 8 hours?
no                   50.0              33.33                            33.33
yes                  33.33             66.67                            33.33
sometimes            16.67              0.00                            33.33

方法二:生成规整的长格式占比表

如果需要更适合后续分析或可视化的长表格式(问题、选项、占比三列),可以先将数据转成长格式,再分组计算:

# 将宽表转成长表,提取问题和对应的回答
melted_df = df.melt(var_name="Question", value_name="Answer")

# 按问题和回答分组,计算每组占该问题总人数的百分比
long_format_result = (
    melted_df.groupby(["Question", "Answer"])
    .size()
    .groupby(level=0)
    .apply(lambda x: x / x.sum() * 100)
    .round(2)
    .reset_index(name="Percentage")
)

print(long_format_result)

运行后输出结果:

Question     Answer  Percentage
0                      Do you exercise?         no        33.33
1                      Do you exercise?        yes        66.67
2                         Do you smoke?         no        50.00
3                         Do you smoke?  sometimes        16.67
4                         Do you smoke?        yes        33.33
5  Do you sleep less than 8 hours?         no        33.33
6  Do you sleep less than 8 hours?  sometimes        33.33
7  Do you sleep less than 8 hours?        yes        33.33

关键说明

  • value_counts(normalize=True):返回各选项在列中的占比(0-1之间的小数)
  • mul(100):将小数占比转换为百分比
  • round(2):保留两位小数,让结果更易读
  • melt():将宽格式数据转换为长格式,方便按问题分组统计

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:17:39