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

Python-Polars:按列分组后将剩余列合并为结构体字段

解决Polars分组后生成字典结构体列的方案

示例数据构造

先模拟你的DataFrame结构:

import polars as pl

df = pl.DataFrame({
    "Census_Tract": ["Tract001", "Tract001", "Tract002", "Tract002"],
    "GEOID_Census": ["GEO1001", "GEO1001", "GEO1002", "GEO1002"],
    "table_B24012": ["B24012_001", "B24012_002", "B24012_001", "B24012_003"],
    "value": [150, 230, 180, 310]
})

可行实现代码

使用Polars内置的结构体和列表方法,避免Python lambda带来的性能损耗:

result = (
    df.group_by(["Census_Tract", "GEOID_Census"])
    .agg(
        # 先将每组的table_B24012和value打包为结构体列表
        pl.struct(
            key=pl.col("table_B24012"),
            value=pl.col("value")
        ).alias("temp_struct_list")
    )
    .with_columns(
        # 将结构体列表转换为字典列
        pl.col("temp_struct_list").list.to_dict(
            key_name="key",
            value_name="value"
        ).alias("table_value_dict")
    )
    .drop("temp_struct_list")  # 删除临时列
)

print(result)

结果说明

运行后每个GEOID_Census对应一行,table_value_dict列存储的是table_B24012与value映射的字典,示例输出:

shape: (2, 3)
┌───────────────┬────────────────┬───────────────────────────────────┐
│ Census_Tract  ┆ GEOID_Census   ┆ table_value_dict                  │
│ ---           ┆ ---            ┆ ---                               │
│ str           ┆ str            ┆ object                            │
╞═══════════════╪════════════════╪═══════════════════════════════════╡
│ Tract001      ┆ GEO1001        ┆ {"B24012_001":150, "B24012_002":230} │
│ Tract002      ┆ GEO1002        ┆ {"B24012_001":180, "B24012_003":310} │
└───────────────┴────────────────┴───────────────────────────────────┘

替代方案(适合小数据量)

如果你的数据集不大,也可以用map_elements直接生成字典:

result = df.group_by(["Census_Tract", "GEOID_Census"]).agg(
    pl.map_elements(
        lambda group: dict(zip(group["table_B24012"], group["value"])),
        return_dtype=pl.Object
    ).alias("table_value_dict")
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 05:22:35