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

如何在Python Polars中对两列列表执行zip操作?

解决方案

方法1:生成配对后的列表列

直接用Polars内置的arr.zip()方法,对B、C列按位置配对生成元组列表列,同时保留原A列数据:

import polars as pl

df = pl.DataFrame({
    'A': ['t', 'u', 'v'],
    'B': [['a', 'v', 'x'], ['f', 'g', 'h'], ['p', 'o', 'i']],
    'C': [[11, 12, 14], [41, 42, 43], [66, 77, 88]]
})

result = df.with_columns(
    paired=pl.col("B").arr.zip(pl.col("C"))
)
print(result)

输出结果:

shape: (3, 4)
┌─────┬─────────────┬─────────────┬─────────────────────────────┐
│ A   ┆ B           ┆ C           ┆ paired                      │
│ --- ┆ ---         ┆ ---         ┆ ---                         │
│ str ┆ list[str]   ┆ list[i64]   ┆ list[tuple[str, i64]]       │
╞═════╪═════════════╪═════════════╪═════════════════════════════╡
│ t   ┆ ["a", "v",… ┆ [11, 12, 14] ┆ [("a", 11), ("v", 12), ("x… │
│ u   ┆ ["f", "g",… ┆ [41, 42, 43] ┆ [("f", 41), ("g", 42), ("h… │
│ v   ┆ ["p", "o",… ┆ [66, 77, 88] ┆ [("p", 66), ("o", 77), ("i… │
└─────┴─────────────┴─────────────┴─────────────────────────────┘

方法2:展开为单行配对记录

如果需要把每个配对拆成单独一行,同时保留A列对应值,只需在生成配对列后调用explode()即可——Polars会自动将A列值复制到对应行,完全不会出现关联错误:

result = df.with_columns(
    paired=pl.col("B").arr.zip(pl.col("C"))
).explode("paired")

# 可选:将配对元组拆分为单独列
result = result.with_columns(
    B_val=pl.col("paired").list.get(0),
    C_val=pl.col("paired").list.get(1)
).drop("paired")

print(result)

输出结果:

shape: (9, 4)
┌─────┬─────────────┬─────────────┬───────┬───────┐
│ A   ┆ B           ┆ C           ┆ B_val ┆ C_val │
│ --- ┆ ---         ┆ ---         ┆ ---   ┆ ---   │
│ str ┆ list[str]   ┆ list[i64]   ┆ str   ┆ i64   │
╞═════╪═════════════╪═════════════╪═══════╪═══════╡
│ t   ┆ ["a", "v",… ┆ [11, 12, 14] ┆ a     ┆ 11    │
│ t   ┆ ["a", "v",… ┆ [11, 12, 14] ┆ v     ┆ 12    │
│ t   ┆ ["a", "v",… ┆ [11, 12, 14] ┆ x     ┆ 14    │
│ u   ┆ ["f", "g",… ┆ [41, 42, 43] ┆ f     ┆ 41    │
│ u   ┆ ["f", "g",… ┆ [41, 42, 43] ┆ g     ┆ 42    │
│ u   ┆ ["f", "g",… ┆ [41, 42, 43] ┆ h     ┆ 43    │
│ v   ┆ ["p", "o",… ┆ [66, 77, 88] ┆ p     ┆ 66    │
│ v   ┆ ["p", "o",… ┆ [66, 77, 88] ┆ o     ┆ 77    │
│ v   ┆ ["p", "o",… ┆ [66, 77, 88] ┆ i     ┆ 88    │
└─────┴─────────────┴─────────────┴───────┴───────┘

优势说明

arr.zip()是Polars底层优化的向量化操作,比Python原生zip()循环处理快得多,适合大数据量场景;explode()也是内置对齐逻辑,完全不用手动处理A列的关联问题。

内容的提问来源于stack exchange,提问作者Arthur Julião

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:15:44