You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas的value_counts()统计满足条件的指定列值频次?

问题:带条件统计DataFrame中列值的出现频次

需要统计DataFrame中满足特定条件的值的数量:在给定DataFrame里,统计Matched Previous ID列中,对应Max Score列值大于0.55的各值出现次数。

示例DataFrame:

Next ID  Max Score          Matched Previous ID
0        1   0.893201                    1
1        2   0.858763                    2
2        3   0.902589                    3
3        8   0.806605                    8
4       15   0.867527                   15
5       21   0.536942                   21
6       22   0.909944                   22
7       28   0.828891                   28
8       94   0.223704                    4
9       96   0.583676                    4

预期结果:值4出现1次,值21出现0次(其对应分数低于0.55)。已知df.value_counts()可无条件统计频次,请问能否结合条件使用,具体该如何操作?


解决方法

当然可以结合条件使用,以下是两种常用实现方式:

方法1:先过滤再统计

先通过布尔索引筛选出Max Score > 0.55的行,再对目标列执行value_counts():

# 筛选符合分数条件的行
filtered_rows = df[df['Max Score'] > 0.55]
# 统计目标列的频次
counts = filtered_rows['Matched Previous ID'].value_counts()

执行后,counts会得到符合条件的ID频次(示例中4会显示1次,21不会出现在结果里)。如果需要把所有原ID都显示出来(包括频次为0的),可以用reindex补全:

# 获取原列所有唯一ID
all_ids = df['Matched Previous ID'].unique()
# 补全0值并排序(可选)
counts_with_zero = counts.reindex(all_ids, fill_value=0).sort_index()

这样结果里就会包含21,且频次为0,完全匹配预期。

方法2:分组后条件计数

用groupby按Matched Previous ID分组,再统计每组中满足分数条件的行数:

counts = df.groupby('Matched Previous ID')['Max Score'].apply(lambda x: (x > 0.55).sum())

这种方式会直接返回所有原ID的计数结果,包括频次为0的情况(示例中21对应的结果就是0),无需额外补全。


内容的提问来源于stack exchange,提问作者Donnerhorn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 15:01:19