基于条件统计distinct ID数量:按类别统计符合分数要求的ID数
问题说明
我有如下结构的数据集:
| Category | Score | ID |
|---|---|---|
| A | 96 | 1 |
| A | 95 | 1 |
| A | 95 | 2 |
| A | 95 | 2 |
| B | 96 | 2 |
| B | 95 | 2 |
| B | 96 | 2 |
| C | 97 | 3 |
| C | 96 | 3 |
| C | 97 | 3 |
需要针对每个Category,统计拥有2个及以上Score < 97的distinct ID的数量,期望输出格式如下:
| Category | Count |
|---|---|
| A | 2 |
| B | 1 |
| C | 0 |
基于Pandas的解决方案
以下是实现需求的具体代码,逻辑清晰易懂:
import pandas as pd # 构造原始数据 data = { 'Category': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'], 'Score': [96, 95, 95, 95, 96, 95, 96, 97, 96, 97], 'ID': [1, 1, 2, 2, 2, 2, 2, 3, 3, 3] } df = pd.DataFrame(data) # 1. 先筛选出分数小于97的记录 filtered = df[df['Score'] < 97] # 2. 按类别和ID分组,统计每个ID在对应类别下有多少条符合分数条件的记录 id_score_count = filtered.groupby(['Category', 'ID']).size().reset_index(name='valid_score_count') # 3. 筛选出符合条件的记录数≥2的ID qualified_ids = id_score_count[id_score_count['valid_score_count'] >= 2] # 4. 按类别统计合格ID的数量,同时补全所有原始类别(保证Count为0的类别也能显示) result = qualified_ids.groupby('Category').size().reindex(df['Category'].unique(), fill_value=0).reset_index(name='Count') print(result)
运行代码后会输出:
Category Count 0 A 2 1 B 1 2 C 0
内容的提问来源于stack exchange,提问作者CowboyCoder
相关产品推荐
相关产品推荐

