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

如何使用Pandas对列内特定单元格进行选择性缩进格式化?

实现Pandas某列部分单元格缩进、其余左对齐的方法

当然可以实现你想要的这种层级显示效果!下面给你两种常用的方案,分别适用于不同的场景:

方案1:直接修改单元格内容(适合纯文本输出/导出)

这种方法通过给需要缩进的单元格文本前添加空格,从内容层面实现缩进,不管是打印还是导出成文本文件都能保留格式。

示例代码

import pandas as pd

# 构造你的示例数据
data = {
    "分类": ["总营收", "Widget 1", "Widget 2", "总支出", "Widget 1", "Widget 2"],
    "数值": [2.00, 1.00, 1.00, 2.00, 1.00, 1.00]
}
df = pd.DataFrame(data)

# 定义缩进规则:这里假设以"Widget"开头的是子项,添加两个空格缩进
df["分类"] = df["分类"].apply(lambda x: f"  {x}" if x.startswith("Widget") else x)

# 打印查看效果(用to_string避免Pandas自动截断)
print(df.to_string(index=False))

效果输出

分类    数值
 总营收    2.00
  Widget 1    1.00
  Widget 2    1.00
 总支出    2.00
  Widget 1    1.00
  Widget 2    1.00

如果你的子项判断逻辑不是基于文本开头,而是基于层级关系(比如父项是"总营收""总支出",后面紧跟的两行是子项),可以调整如下:

# 找到所有父项的索引
parent_rows = df[df["分类"].isin(["总营收", "总支出"])].index

# 给每个父项后面的两行添加缩进
for idx in parent_rows:
    df.loc[idx+1:idx+2, "分类"] = "  " + df.loc[idx+1:idx+2, "分类"]

方案2:使用Pandas Styler设置CSS样式(适合Jupyter/网页展示)

如果是在Jupyter Notebook或者需要网页展示的场景,推荐用Styler功能,通过CSS样式控制缩进,不会修改原数据内容,仅改变显示效果。

示例代码

import pandas as pd

data = {
    "分类": ["总营收", "Widget 1", "Widget 2", "总支出", "Widget 1", "Widget 2"],
    "数值": [2.00, 1.00, 1.00, 2.00, 1.00, 1.00]
}
df = pd.DataFrame(data)

# 定义样式函数:给子项设置文本缩进
def apply_indent(val):
    if val.startswith("Widget"):
        # 设置20px的缩进,可根据需求调整
        return "text-indent: 20px;"
    # 父项保持默认左对齐
    return ""

# 对"分类"列应用样式
styled_table = df.style.applymap(apply_indent, subset=["分类"])

# 在Jupyter中直接显示样式化的表格
styled_table

效果说明

在Jupyter里运行后,"Widget"开头的行会自动缩进20px,父项"总营收""总支出"保持左对齐,原数据的内容不会被修改,非常适合做交互式展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:25:37