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

如何计算Group列唯一值数量及各分组中获Bonus人数(Pandas)

解决方案:统计分组唯一值及各分组获奖金人数

1. 先处理数据集(修正格式问题)

你提供的数据集最后一行分隔符存在格式问题,先构造正确的DataFrame:

import pandas as pd

data = {
    'Bonus': ['Yes', 'No', 'No', 'Yes', 'No'],
    'Group': ['Hockey', 'Cricket', 'Football', 'Tennis', 'Hockey']
}
df = pd.DataFrame(data)

2. 统计Group列的唯一值数量

有两种常用实现方式:

  • 直接获取唯一值数量:
group_unique_num = df['Group'].nunique()
print(f"Group列唯一值数量:{group_unique_num}")
# 输出:Group列唯一值数量:4
  • 用value_counts()查看各分组总人数,同时通过结果长度得到唯一值数量:
group_total_counts = df['Group'].value_counts()
print("各分组总人数:")
print(group_total_counts)
print(f"Group列唯一值数量:{len(group_total_counts)}")

3. 统计每个分组中Bonus为Yes的人数

这里提供三种实用方法:

方法1:映射后分组求和

将Yes/No转为1/0,再按分组求和:

bonus_yes_counts = df['Bonus'].map({'Yes': 1, 'No': 0}).groupby(df['Group']).sum()
print("\n各分组获奖金人数:")
print(bonus_yes_counts)

输出:

Group
Cricket     0
Football    0
Hockey      1
Tennis      1
Name: Bonus, dtype: int64

方法2:筛选后分组统计

先筛选出Bonus=Yes的行,再按分组统计数量,补全无奖金的分组:

bonus_yes_counts = df[df['Bonus'] == 'Yes'].groupby('Group').size()
# 补全所有分组,无奖金的填0
bonus_yes_counts = bonus_yes_counts.reindex(df['Group'].unique(), fill_value=0)
print("\n各分组获奖金人数:")
print(bonus_yes_counts)

方法3:交叉表直接生成

用crosstab生成交叉表,直接提取Yes列的数据:

bonus_yes_counts = pd.crosstab(df['Group'], df['Bonus'])['Yes']
print("\n各分组获奖金人数:")
print(bonus_yes_counts)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:10:28