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
相关产品推荐
相关产品推荐

