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

Python:统计pandas DataFrame重复值并按project_id出现频次拆分数据集

统计结果异常原因排查

你遇到的groupby('project_id').size()统计结果不符合预期的问题,可按以下顺序排查:

  • 先检查project_id列是否存在不可见字符:比如字段值前后的空格、制表符、换行符,肉眼看起来完全相同的'61477'和'61477 '(末尾带空格)会被pandas识别为不同的分组值,可先执行字段清洗去除前后空白:
    df['project_id'] = df['project_id'].str.strip()
    
  • 其次检查是否存在肉眼易混淆的字符:比如字母O与数字0、小写字母l与数字1这类字符,会导致本应属于同一分组的行被分到不同组。
  • 确认你操作的DataFrame数据源与你预期一致,有没有提前做过合并、拼接操作导致数据行数超出预期。

正确实现拆分需求的代码

你之前用groupby.size()得到的是聚合后的分组统计结果,行数等于project_id的唯一值数量,无法直接用于给原表每一行匹配分组次数,你可以用transform方法把分组统计结果广播回原表的每一行,再按规则拆分即可,完整代码如下:

import pandas as pd

# 1. 清洗project_id字段,去除前后空白
df['project_id'] = df['project_id'].str.strip()

# 2. 给原表每一行添加对应project_id的出现次数
df['occur_count'] = df.groupby('project_id')['project_id'].transform('size')

# 3. 按规则拆分到不同DataFrame
df1 = df[df['occur_count'].isin([1,2])].copy()
df2 = df[df['occur_count'].isin([3,4])].copy()
df3 = df[df['occur_count'].isin([5,6])].copy()
df4 = df[df['occur_count'].isin([7,8])].copy()
df5 = df[df['occur_count'] >=9].copy()

# (可选)不需要保留次数字段可执行删除
# for temp_df in [df1, df2, df3, df4, df5]:
#     temp_df.drop(columns='occur_count', inplace=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:06:02