如何计算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
相关产品推荐
相关产品推荐

