【问题标题】: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
  • 你的数据集是如何构成的?请提供代码示例
  • 为什么类别A ID 2 只比97 少一个分数?
  • 你是对的,它不会。我调整了桌子没有错误。

标签: 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

【讨论】:

  • 谢谢!这很适合我,我相信给出了正确的数字。
猜你喜欢
  • 2021-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
  • 2022-12-02
  • 2017-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多