基于列值的条件迭代:按类别统计符合条件的记录及去重ID计数
问题描述
我有如下数据集:
| category | value | ID |
|---|---|---|
| A | 1 | x |
| A | 0.5 | y |
| A | 0.33 | y |
| B | 0.5 | z |
| B | 0.33 | z |
| C | 5 | w |
| C | 0.33 | w |
需要完成两个统计需求:
- 对每个
category,统计value ≤ 0.5的实例数量,输出为DataFrame或列表;
- 对每个
- 进阶需求:统计时每个
ID仅计数一次(同一category下,只要某个ID有至少一条符合value ≤ 0.5的记录,就计1次,不管该ID有多少条符合条件的记录)。
- 进阶需求:统计时每个
预期结果:
- 原需求:A类→2,B类→2,C类→1;
- 进阶需求:A类→1,B类→1,C类→1。
解决方案
以下是基于Python pandas库的实现代码:
1. 原需求实现
加载数据集后,筛选符合条件的记录再按category分组计数:
import pandas as pd # 构造数据集 data = { 'category': ['A', 'A', 'A', 'B', 'B', 'C', 'C'], 'value': [1, 0.5, 0.33, 0.5, 0.33, 5, 0.33], 'ID': ['x', 'y', 'y', 'z', 'z', 'w', 'w'] } df = pd.DataFrame(data) # 统计每个category下value≤0.5的实例数 result_original = df[df['value'] <= 0.5].groupby('category').size().reset_index(name='count') print(result_original)
输出结果:
category count 0 A 2 1 B 2 2 C 1
2. 进阶需求实现
先筛选符合条件的记录,按category和ID去重后再分组计数:
# 统计每个category下符合条件的唯一ID数量 result_advanced = df[df['value'] <= 0.5].drop_duplicates(subset=['category', 'ID']).groupby('category').size().reset_index(name='unique_id_count') print(result_advanced)
输出结果:
category unique_id_count 0 A 1 1 B 1 2 C 1
内容的提问来源于stack exchange,提问作者CowboyCoder
相关产品推荐
相关产品推荐

