Pandas使用groupby按domains字段分组未得预期结果如何解决
问题原因
email1.groupby('domains')执行后返回的是DataFrameGroupBy惰性计算对象,本身不会主动加载、输出分组后的结构化明细,直接打印只会显示对象的内存地址信息,不会返回预期的拆分后数据集。- 追加
.count()属于分组聚合操作,会把每个域名下的所有行压缩成1行,统计各列的非空值数量,结果是聚合统计表,自然和「按domains拆分分组保留明细」的目标不符。
正确实现方式
根据需要的输出形式选对应代码即可:
- 遍历查看所有分组的明细内容
# 生成分组对象 GR = email1.groupby('domains') # 循环遍历每个分组,打印分组名和对应子数据集 for domain, sub_df in GR: print(f"=== 分组域名:{domain} ===") print(sub_df)
- 把分组结果存为可按键取值的字典,方便后续调用
GR = email1.groupby('domains') # 转为 {域名值: 对应子DataFrame} 格式的字典 group_result = dict(tuple(GR)) # 后续需要取某个域名的数据直接按key取即可,比如取163.com对应的数据 data_163 = group_result['163.com']
- 快速校验分组效果,查看每个分组的前N行
GR = email1.groupby('domains') # 查看每个域名分组的前3行数据,无需遍历 print(GR.head(3))
- 如果需要保留原表行数,给每行匹配对应分组的统计值,用
transform实现
# 新增列记录每个域名对应的总数据量,不会像count()那样压缩行数 email1['domain_total'] = email1.groupby('domains')['domains'].transform('count')
内容的提问来源于stack exchange,提问作者Luka
相关产品推荐
相关产品推荐

