【问题标题】:Count distinct values based on conditionals根据条件计算不同的值
【发布时间】:2022-09-22 23:07:47
【问题描述】:
我有一个看起来像这样的数据集:
| 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 |
对于每个类别,我想要计算 2 个分数(或更多)< 97 的不同 ID。因此,基于此数据,我的最终目标结果将是一个数据框或列表,如下所示:
| Category |
Count |
| A |
2 |
| B |
1 |
| C |
0 |
标签:
python
pandas
for-loop
group-by
【解决方案1】:
您可以进行嵌套 groupby 以获取每个 Category 组中唯一 ID 的计数。
out = (df[df['Score'].lt(97)]
.groupby('Category')
.apply(lambda g: g.groupby('ID').filter(lambda x: len(x) >= 2)['ID'].nunique())
.to_frame('Count')
.reset_index())
# or
out = (df[df['Score'].lt(97)]
.groupby(['Category', 'ID'])
.filter(lambda g: len(g) >= 2)
.groupby(['Category'])['ID'].nunique()
.reindex(df['Category'].unique(), fill_value=0)
.to_frame('Count')
.reset_index())
print(out)
Category Count
0 A 2
1 B 1
2 C 0