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

如何在Python Polars中创建类似Pandas的嵌套表格

在Polars中实现多级嵌套表格(支持行/列三级嵌套)

Polars确实没有Pandas式的多级索引,但可以通过**结构化列(Struct Columns)**结合分组、透视操作,实现完全等效的行/列多级嵌套表格效果,包括三级嵌套。以下是针对房贷审批数据集的具体实现方案:

核心思路

用Polars的struct类型模拟多级索引的层级关系:

  • 行嵌套:将多个分组字段打包成一个struct列,作为行的层级标识
  • 列嵌套:透视时指定多个字段作为列维度,Polars会自动将这些维度组合成tuple形式的列名,或手动打包成struct列来明确层级

代码示例

假设已加载数据集为pl.DataFrame对象:

import polars as pl

# 加载本地数据集
df = pl.read_csv("home_loan_approval.csv")

1. 行两级嵌套表格

实现Gender→Married的行层级,聚合贷款金额的均值与总和:

row_two_level = df.group_by(["Gender", "Married"]).agg(
    pl.mean("LoanAmount").alias("平均贷款额"),
    pl.sum("LoanAmount").alias("总贷款额")
).with_columns(
    # 打包行层级字段为struct,模拟多级索引
    pl.struct(["Gender", "Married"]).alias("行层级")
).drop(["Gender", "Married"]).select(["行层级", "平均贷款额", "总贷款额"])

# 查看结果
print(row_two_level)

2. 列两级嵌套表格

实现Loan_Status→Property_Area的列层级,聚合申请人收入均值:

col_two_level = df.group_by(["Gender", "Loan_Status", "Property_Area"]).agg(
    pl.mean("ApplicantIncome").alias("平均收入")
).pivot(
    index="Gender",
    columns=["Loan_Status", "Property_Area"],
    values="平均收入"
)

# 列名会以tuple形式呈现(如("Y", "Urban")),模拟嵌套层级;也可手动打包为struct列
col_two_level = col_two_level.rename(
    {col: pl.struct({"贷款状态": col[0], "房产区域": col[1]}).alias("列层级") for col in col_two_level.columns if col != "Gender"}
)

3. 行+列三级嵌套表格

实现行层级Gender→Married→Dependents,列层级Loan_Status→Property_Area→Credit_History,聚合贷款额均值与申请计数:

triple_nested = df.group_by(
    ["Gender", "Married", "Dependents", "Loan_Status", "Property_Area", "Credit_History"]
).agg(
    pl.mean("LoanAmount").alias("平均贷款额"),
    pl.count().alias("申请数量")
).pivot(
    index=["Gender", "Married", "Dependents"],
    columns=["Loan_Status", "Property_Area", "Credit_History"],
    values=["平均贷款额", "申请数量"]
).with_columns(
    # 打包行三级层级为struct
    pl.struct(["Gender", "Married", "Dependents"]).alias("行三级层级")
).drop(["Gender", "Married", "Dependents"])

# 列名会以tuple形式呈现完整三级层级(如("Y", "Urban", 1.0, "平均贷款额"))

展开嵌套层级

如果需要将嵌套的struct或tuple层级展开,使用unnest方法即可:

# 展开行层级的struct
row_two_level.unnest("行层级")

# 展开列的tuple层级(若列是struct类型,直接对列字段调用unnest)
col_two_level.unnest("列层级")

总结

Polars通过结构化列+多维度透视的组合,完全可以实现与Pandas多级索引表格等效的嵌套效果,支持任意层级的行/列嵌套,同时保留了Polars处理大型数据集的性能优势。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:55:22