在 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 │
└─────┴──────┘
有没有办法将每组中的所有字符串连接到极坐标中?
这是我发现的一种方法:
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 │
└─────┴────────┘
.str.join()
方法。
df.group_by('a').agg(pl.col('b').str.join())
shape: (2, 2)
┌─────┬────────┐
│ a ┆ b │
│ --- ┆ --- │
│ i64 ┆ str │
╞═════╪════════╡
│ 1 ┆ foobar │
│ 2 ┆ foo │
└─────┴────────┘
你可以使用
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 │
└─────┴────────┘