熊猫 `transform(set)` 引发异常

avl*_*oss 4 python transform set dataframe pandas

我正在尝试通过 进行转换set,但遇到了例外。Transform 可以很好地与“sum”和许多其他聚合函数一起使用,但不能与setor一起使用list

>>> import pandas as pd
>>> df = pd.DataFrame({"a":[1,2,1,], "b":[1,1,2]})
>>> df
   a  b
0  1  1
1  2  1
2  1  2
>>> df.groupby("a").b.transform(set)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/avloss/conda/lib/python3.7/site-packages/pandas/core/groupby/generic.py", line 1032, in transform
    s = klass(res, indexer)
  File "/Users/avloss/conda/lib/python3.7/site-packages/pandas/core/series.py", line 282, in __init__
    "{0!r} type is unordered" "".format(data.__class__.__name__)
TypeError: 'set' type is unordered
Run Code Online (Sandbox Code Playgroud)

我所期待的是:

   a      b   
0  1  {1, 2}
1  2     {1}
2  1  {1, 2}
Run Code Online (Sandbox Code Playgroud)

ank*_*_91 5

我能想到的最简单的方法是将aggregateset映射回来

df['new_col'] = df['a'].map(df.groupby('a')['b'].agg(set))
print(df)
Run Code Online (Sandbox Code Playgroud)
   a  b new_col
0  1  1  {1, 2}
1  2  1     {1}
2  1  2  {1, 2}
Run Code Online (Sandbox Code Playgroud)