如何将Python DataFrame调整为指定格式在Jupyter Notebook中显示
实现方法
你需要的是在Jupyter Notebook中合并DataFrame相邻相同值的单元格显示效果,不需要修改原始数据结构,直接使用pandas内置的Styler组件即可实现。你之前使用groupby达不到效果是正常的,groupby是用于数据聚合计算的工具,和显示层面的单元格合并不属于同一应用场景。
代码示例
1. 模拟原始数据(可直接替换为你自己的DataFrame)
import pandas as pd # 此处为模拟的原始数据结构,直接替换为你自己的df即可 data = { "一级分类": ["食品", "食品", "食品", "日用品", "日用品", "电器"], "二级分类": ["零食", "零食", "生鲜", "清洁用品", "洗漱用品", "家电"], "商品名称": ["薯片", "饼干", "苹果", "洗洁精", "牙膏", "冰箱"], "售价": [9.9, 12.9, 6.9, 19.9, 14.9, 2999] } df = pd.DataFrame(data)
2. 合并单元格显示代码
# 自定义合并重复值的显示样式 def merge_cell(val, current_series): if current_series.shift()[current_series.index == val.index[0]].values[0] == val.values[0]: # 相同值隐藏文字+去掉上边框,视觉上实现合并效果 return "color: transparent; border-top: none" return "" # 填入你需要合并相同值的列名,可根据自己的需求修改 need_merge_cols = ["一级分类", "二级分类"] df_styler = df.style for col in need_merge_cols: df_styler = df_styler.apply(merge_cell, subset=[col], current_series=df[col]) # 可选:设置全局居中对齐,显示效果更美观 df_styler = df_styler.set_properties(**{"text-align": "center"}) df_styler = df_styler.set_table_styles([ {"selector": "th", "props": [("text-align", "center")]} ]) # Jupyter中直接运行此行即可显示目标效果 df_styler
注意事项
- 上述方法仅修改Jupyter Notebook中的显示效果,不会改动原始DataFrame的数据,后续数据处理仍可正常使用原
df对象 - 操作前请保证需要合并的列已按值排序,确保相同值的行是相邻状态,否则无法实现合并效果
- 如果你需要将该格式导出为Excel,可额外使用
openpyxl等库处理单元格合并,仅在Jupyter内显示无需额外操作
内容的提问来源于stack exchange,提问作者LCh
相关产品推荐
相关产品推荐

