Pandas如何筛选value_counts统计的低频率Series行
问题说明
已有的datecreated列日期频率统计代码:
autos['datecreated'].str[:10].value_counts(normalize=True, dropna=False)
原有筛选代码存在两个问题,无法得到预期结果:
- 列名拼写不一致:代码中混用了
datecreated和datecrawled两个不同列名,筛选目标不匹配 - 逻辑错误:直接对
value_counts()返回结果做< 0.0001判断,得到的是去重后日期维度的布尔序列,长度和原表行数不匹配,无法直接用于筛选原表行。
正确实现步骤
- 先计算目标列各日期值的占比,筛选出占比低于0.0001的日期集合
# 注意列名替换为你实际要筛选的列,此处以datecreated为例 date_freq = autos['datecreated'].str[:10].value_counts(normalize=True, dropna=False) low_freq_dates = date_freq[date_freq < 0.0001].index
- 用日期集合匹配原表对应列,筛选出所有符合条件的行
# 提取目标行 low_freq_rows = autos[autos['datecreated'].str[:10].isin(low_freq_dates)]
注意事项
- 操作前确认目标列名,不要出现拼写错误,避免误操作其他列
value_counts()设置dropna=False后,空值的占比也会被纳入统计,占比低于阈值的空值对应的行也会被正常筛选出来,无需额外处理空值逻辑- 不要直接将
value_counts() < 0.0001的布尔结果传入原表方括号筛选,二者长度不匹配会触发索引报错。
内容的提问来源于stack exchange,提问作者davidfunction
相关产品推荐
相关产品推荐

