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

如何用Python统计调查中用户性取向偏好的各类选择及组合?

用Python统计性取向偏好调查数据的方法

首先,你的数据集结构可以用pandas快速处理,不管是单类偏好计数还是组合统计都很简便,比手动转列表效率高得多。以下是具体实现步骤:

1. 构造/读取数据集

假设你的数据是表格形式,先导入pandas并构造示例数据(如果是本地文件,用pd.read_csv()读取即可):

import pandas as pd

# 模拟你的调查数据集
data = {
    'User': [1, 2, 3, 4],
    'Men': ['Men', 'Men', '', ''],
    'Women': ['Women', '', 'Women', ''],
    'Non-bi': ['', '', 'Non-bi', ''],
    'Asexual': ['', '', '', 'Asexual']
}
df = pd.DataFrame(data)

2. 统计单类偏好用户数量

直接对偏好列做非空值计数,就能得到喜欢男性、女性、非二元性别者等的用户总数:

# 统计每类偏好的用户数
single_counts = df[['Men', 'Women', 'Non-bi', 'Asexual']].count()
print("单类偏好用户数量:")
print(single_counts)

输出结果:

Men        2
Women      2
Non-bi     1
Asexual    1
dtype: int64

3. 统计各类偏好组合的出现次数

通过apply遍历每行,提取非空的偏好选项并拼接成组合字符串,再用value_counts()统计频次:

# 生成每行的偏好组合(过滤空值)
df['preference_comb'] = df[['Men', 'Women', 'Non-bi', 'Asexual']].apply(
    lambda row: ', '.join([col for col, val in row.items() if val != '']),
    axis=1
)

# 统计组合出现次数
comb_counts = df['preference_comb'].value_counts()
print("\n偏好组合统计:")
print(comb_counts)

输出结果:

Men                  1
Men, Women           1
Women, Non-bi        1
Asexual              1
Name: preference_comb, dtype: int64

补充:你的思路的实现

如果坚持用列表+计数的方式,也可以这么做,代码如下:

from collections import Counter

# 把每行的偏好转成列表,再收集所有组合
preference_lists = []
for _, row in df.iterrows():
    prefs = [col for col in ['Men', 'Women', 'Non-bi', 'Asexual'] if row[col] != '']
    # 用元组作为可哈希的键,或者转字符串
    preference_lists.append(tuple(prefs))

# 统计组合次数
counter = Counter(preference_lists)
print("\n列表法统计组合:")
for comb, cnt in counter.items():
    print(f"{', '.join(comb)}: {cnt}")

两种方法都能达到目的,但pandas的方式更简洁,适合处理大规模数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:32:24