按总和字符串分组

问题描述 投票:0回答:3

在 pandas 中,我可以做

In [33]: df = pd.DataFrame({'a': [1, 1, 2], 'b': ['foo', 'bar', 'foo']})

In [34]: df
Out[34]:
   a    b
0  1  foo
1  1  bar
2  2  foo

In [35]: df.groupby('a')['b'].sum()
Out[35]:
a
1    foobar
2       foo
Name: b, dtype: object

当我这样做时,将字符串连接起来

groupby.sum

然而,在极地:

In [36]: df = pl.DataFrame({'a': [1, 1, 2], 'b': ['foo', 'bar', 'foo']})

In [37]: df
Out[37]:
shape: (3, 2)
┌─────┬─────┐
│ a   ┆ b   │
│ --- ┆ --- │
│ i64 ┆ str │
╞═════╪═════╡
│ 1   ┆ foo │
│ 1   ┆ bar │
│ 2   ┆ foo │
└─────┴─────┘

In [38]: df.group_by('a').agg(pl.col('b').sum())
Out[38]:
shape: (2, 2)
┌─────┬──────┐
│ a   ┆ b    │
│ --- ┆ ---  │
│ i64 ┆ str  │
╞═════╪══════╡
│ 2   ┆ null │
│ 1   ┆ null │
└─────┴──────┘

有没有办法将每组中的所有字符串连接到极坐标中?

python group-by python-polars
3个回答
1
投票

这是我发现的一种方法:

In [13]: df.group_by('a', maintain_order=True).agg(pl.col('b')).with_columns(pl.col('b').list.join(separator=''))
Out[13]:
shape: (2, 2)
┌─────┬────────┐
│ a   ┆ b      │
│ --- ┆ ---    │
│ i64 ┆ str    │
╞═════╪════════╡
│ 1   ┆ foobar │
│ 2   ┆ foo    │
└─────┴────────┘

0
投票

有一个

.str.join()
方法。

df.group_by('a').agg(pl.col('b').str.join())
shape: (2, 2)
┌─────┬────────┐
│ a   ┆ b      │
│ --- ┆ ---    │
│ i64 ┆ str    │
╞═════╪════════╡
│ 1   ┆ foobar │
│ 2   ┆ foo    │
└─────┴────────┘

0
投票

你可以使用

map_elements
来做到这一点:

In [18]: df.group_by('a').agg(pl.col('b').map_elements(lambda subdf: "".join(subdf)))
Out[18]: 
shape: (2, 2)
┌─────┬────────┐
│ a   ┆ b      │
│ --- ┆ ---    │
│ i64 ┆ str    │
╞═════╪════════╡
│ 2   ┆ foo    │
│ 1   ┆ foobar │
└─────┴────────┘
© www.soinside.com 2019 - 2024. All rights reserved.