gpt4 book ai didi

dataframe - (Polars)如何通过在另一列中指定的索引从列表中获取元素

转载 作者:行者123 更新时间:2023-12-05 09:26:10 25 4
gpt4 key购买 nike

我有一个包含 2 列的数据框,其中第一列包含列表,第二列包含整数索引。如何通过第二列中指定的索引从第一列获取元素?或者更好的是,将该元素放在第 3 列中。因此,例如,如何从这个

a = pl.DataFrame([{'lst': [1, 2, 3], 'ind': 1}, {'lst': [4, 5, 6], 'ind': 2}])
┌───────────┬─────┐
│ lst ┆ ind │
│ --- ┆ --- │
│ list[i64] ┆ i64 │
╞═══════════╪═════╡
│ [1, 2, 3] ┆ 1 │
├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌┤
│ [4, 5, 6] ┆ 2 │
└───────────┴─────┘

你可以得到这个

b = pl.DataFrame([{'lst': [1, 2, 3], 'ind': 1, 'list[ind]': 2}, {'lst': [4, 5, 6], 'ind': 2, 'list[ind]': 6}])
┌───────────┬─────┬───────────┐
│ lst ┆ ind ┆ list[ind] │
│ --- ┆ --- ┆ --- │
│ list[i64] ┆ i64 ┆ i64 │
╞═══════════╪═════╪═══════════╡
│ [1, 2, 3] ┆ 1 ┆ 2 │
├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┤
│ [4, 5, 6] ┆ 2 ┆ 6 │
└───────────┴─────┴───────────┘

谢谢。

最佳答案

编辑

从 python polars 0.14.24 开始,这可以通过以下方式更轻松地完成

df.with_column(pl.col("lst").arr.get(pl.col("ind")).alias("list[ind]"))

原始答案

您可以使用 with_row_count() 添加行计数列以进行分组,然后使用 explode() 列表,这样每个列表元素都在每一行上。然后使用 over() 在行计数列上调用 take() 以从子组中选择元素。

df = pl.DataFrame({"lst": [[1, 2, 3], [4, 5, 6]], "ind": [1, 2]})

df = (
df.with_row_count()
.with_column(
pl.col("lst").explode().take(pl.col("ind")).over(pl.col("row_nr")).alias("list[ind]")
)
.drop("row_nr")
)
shape: (2, 3)
┌───────────┬─────┬───────────┐
│ lst ┆ ind ┆ list[ind] │
│ --- ┆ --- ┆ --- │
│ list[i64] ┆ i64 ┆ i64 │
╞═══════════╪═════╪═══════════╡
│ [1, 2, 3] ┆ 1 ┆ 2 │
├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┤
│ [4, 5, 6] ┆ 2 ┆ 6 │
└───────────┴─────┴───────────┘

关于dataframe - (Polars)如何通过在另一列中指定的索引从列表中获取元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74202907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com