将多列连接成单列中的列表
Concatenate multiple columns into a list in a single column
我想将多个列合并为一个列表。
例如这个数据框:
┌─────┬─────┐
│ a ┆ b │
│ --- ┆ --- │
│ i64 ┆ i64 │
╞═════╪═════╡
│ 1 ┆ 4 │
├╌╌╌╌╌┼╌╌╌╌╌┤
│ 2 ┆ 5 │
├╌╌╌╌╌┼╌╌╌╌╌┤
│ 3 ┆ 6 │
└─────┴─────┘
进入这个:
┌────────────┐
│ combine │
│ --- │
│ list [i64] │
╞════════════╡
│ [1, 4] │
├╌╌╌╌╌╌╌╌╌╌╌╌┤
│ [2, 5] │
├╌╌╌╌╌╌╌╌╌╌╌╌┤
│ [3, 6] │
└────────────┘
现在我是这样做的:
df = df.with_column(pl.map(['a','b'],lambda df:pl.Series(np.column_stack([df[0].to_numpy(),df[1].to_numpy()]).tolist())).alias('combine'))
有更好的方法吗?
试试这个:
df.apply(list, axis=1)
在这里你可以看到一个例子:
>>> import pandas as pd
>>> df = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]})
>>> df
a b
0 1 4
1 2 5
2 3 6
>>> df.apply(list, axis=1)
0 [1, 4]
1 [2, 5]
2 [3, 6]
随着this PR的落地,我们可以reshape
一个Series/Expr
变成一个List
类型的Series/Expr
。这些可以是每行 concatenated
。
df = pl.DataFrame({
"a": [1, 2, 3],
"b": [4, 5, 6]
})
df.select([
pl.concat_list([
pl.col("a").reshape((-1, 1)),
pl.col("b").reshape((-1, 1))
])
])
输出:
shape: (3, 1)
┌────────────┐
│ a │
│ --- │
│ list [i64] │
╞════════════╡
│ [1, 4] │
├╌╌╌╌╌╌╌╌╌╌╌╌┤
│ [2, 5] │
├╌╌╌╌╌╌╌╌╌╌╌╌┤
│ [3, 6] │
└────────────┘
请注意,我们给出了形状 (-1, 1)
,其中 -1
表示推断维度大小。所以这读作 (infer the rows, 1 column)
.
您可以从源代码编译 polars 以使用这个新功能,或者等待几天然后它登陆 PyPi。
我想将多个列合并为一个列表。
例如这个数据框:
┌─────┬─────┐
│ a ┆ b │
│ --- ┆ --- │
│ i64 ┆ i64 │
╞═════╪═════╡
│ 1 ┆ 4 │
├╌╌╌╌╌┼╌╌╌╌╌┤
│ 2 ┆ 5 │
├╌╌╌╌╌┼╌╌╌╌╌┤
│ 3 ┆ 6 │
└─────┴─────┘
进入这个:
┌────────────┐
│ combine │
│ --- │
│ list [i64] │
╞════════════╡
│ [1, 4] │
├╌╌╌╌╌╌╌╌╌╌╌╌┤
│ [2, 5] │
├╌╌╌╌╌╌╌╌╌╌╌╌┤
│ [3, 6] │
└────────────┘
现在我是这样做的:
df = df.with_column(pl.map(['a','b'],lambda df:pl.Series(np.column_stack([df[0].to_numpy(),df[1].to_numpy()]).tolist())).alias('combine'))
有更好的方法吗?
试试这个:
df.apply(list, axis=1)
在这里你可以看到一个例子:
>>> import pandas as pd
>>> df = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]})
>>> df
a b
0 1 4
1 2 5
2 3 6
>>> df.apply(list, axis=1)
0 [1, 4]
1 [2, 5]
2 [3, 6]
随着this PR的落地,我们可以reshape
一个Series/Expr
变成一个List
类型的Series/Expr
。这些可以是每行 concatenated
。
df = pl.DataFrame({
"a": [1, 2, 3],
"b": [4, 5, 6]
})
df.select([
pl.concat_list([
pl.col("a").reshape((-1, 1)),
pl.col("b").reshape((-1, 1))
])
])
输出:
shape: (3, 1)
┌────────────┐
│ a │
│ --- │
│ list [i64] │
╞════════════╡
│ [1, 4] │
├╌╌╌╌╌╌╌╌╌╌╌╌┤
│ [2, 5] │
├╌╌╌╌╌╌╌╌╌╌╌╌┤
│ [3, 6] │
└────────────┘
请注意,我们给出了形状 (-1, 1)
,其中 -1
表示推断维度大小。所以这读作 (infer the rows, 1 column)
.
您可以从源代码编译 polars 以使用这个新功能,或者等待几天然后它登陆 PyPi。