如何在Pandas DataFrame中合并相同分类显示且保留所有字段值?
实现Pandas DataFrame相同分类合并显示的方法
要实现你想要的相同分类合并显示、保留所有字段的效果,不需要用groupby(groupby更适合聚合字段值,而这里只是调整显示格式),直接处理重复分类的显示即可,下面提供两种可行方案:
方案1:修改DataFrame内容(永久修改)
直接将重复的category值替换为空字符串,然后格式化输出:
import pandas as pd # 创建原始DataFrame df = pd.DataFrame({ "category": ['Associates', 'Manager', 'Associates', 'Associates', 'Engineer', 'Engineer', 'Manager', 'Engineer'], "name": ['Abby', 'Jenny', 'Thomas', 'John', 'Eve', 'Danny', 'Kenny', 'Helen'], "email": ['Abby@email.com', 'Jenny@email.com', 'Thomas@email.com', 'John@email.com', 'Eve@email.com', 'Danny@email.com', 'Kenny@email.com', 'Helen@email.com'] }) # 将重复的category替换为空字符串 df['category'] = df['category'].mask(df['category'].duplicated(), '') # 格式化输出(隐藏索引,调整列宽保证对齐) print(df.to_string(index=False, col_space=[12, 8, 18]))
输出结果完全符合你的要求:
category name email Associates Abby Abby@email.com Thomas Thomas@email.com John John@email.com Manager Jenny Jenny@email.com Kenny Kenny@email.com Engineer Eve Eve@email.com Danny Danny@email.com Helen Helen@email.com
方案2:用Styler设置显示样式(不修改原始数据)
如果不想改动原始DataFrame的内容,只是在显示时隐藏重复分类值,可以用Pandas的Styler功能(适合Jupyter Notebook等交互式环境):
import pandas as pd df = pd.DataFrame({ "category": ['Associates', 'Manager', 'Associates', 'Associates', 'Engineer', 'Engineer', 'Manager', 'Engineer'], "name": ['Abby', 'Jenny', 'Thomas', 'John', 'Eve', 'Danny', 'Kenny', 'Helen'], "email": ['Abby@email.com', 'Jenny@email.com', 'Thomas@email.com', 'John@email.com', 'Eve@email.com', 'Danny@email.com', 'Kenny@email.com', 'Helen@email.com'] }) # 定义隐藏重复分类的样式函数 def hide_duplicate_categories(series): return ['display: none' if val else '' for val in series.duplicated()] # 应用样式并渲染显示 df.style.apply(hide_duplicate_categories, subset=['category'])
该方法仅调整显示效果,原始DataFrame的数据不会被修改。
关于groupby的说明
groupby核心作用是对分组后的字段做聚合操作(比如求和、拼接字符串),如果用它来实现这个显示需求,需要额外把聚合后的name和email拆分成多行,步骤反而繁琐,因此不推荐用groupby处理这类显示格式问题。
内容的提问来源于stack exchange,提问作者Jay-cob
相关产品推荐
相关产品推荐

