Python 要使用groupby和transform创建包含唯一值列表的列吗

Python 要使用groupby和transform创建包含唯一值列表的列吗,python,pandas,Python,Pandas,这是一个示例数据集 test = pd.DataFrame({ 'a' : [1, 2, 3]*2, 'b' : ['a', 'a', 'b', 'b', 'b', 'b',], 'c' : [123, 456, 456, 123, 456, 123] }) print(test) a b c 0 1 a 123 1 2 a 456 2 3 b 456 3 1 b 123 4 2 b 456 5 3 b 123 如果

这是一个示例数据集

test = pd.DataFrame({
    'a' : [1, 2, 3]*2,
    'b' : ['a', 'a', 'b', 'b', 'b', 'b',],
    'c' : [123, 456, 456, 123, 456, 123]
})

print(test)

   a  b    c
0  1  a  123
1  2  a  456
2  3  b  456
3  1  b  123
4  2  b  456
5  3  b  123
如果我
groupby
'a'
'b'
,然后尝试获取每个组中唯一值(
'c'
)的列表,我无法使用
转换获得预期结果

# using transform
print(test.groupby([
    'a',
    'b',
]).c.transform(pd.Series.unique))

0    123
1    456
2    456
3    123
4    456
5    123
如果我改用
unique
,我几乎可以得到预期的输出:

# almost expected output
print(test.groupby([
    'a',
    'b',
]).c.unique())

a  b
1  a         [123]
   b         [123]
2  a         [456]
   b         [456]
3  b    [456, 123]
Name: c, dtype: object
我所希望的是一个使用
transform
pd.Series

预期产量 我知道我可以使用
transform
来获取
'c'
nunique
值,作为一个系列来执行以下操作:

print(test.groupby([
    'a',
    'b',
]).c.transform(pd.Series.nunique))

0    1
1    1
2    2
3    1
4    1
5    2
Name: c, dtype: int64
问题: 为什么我不能对
unique
transform
执行类似的操作

旁注 我知道我可以做
groupby
unique
,然后
reset\u index
merge
与原始数据合并,但我希望有一种更为pythonic/pandas友好的方法

我还尝试使用
set
transform
,但返回了一个错误

print(test.groupby([
    'a',
    'b',
]).c.transform(set))

TypeError: 'set' type is unordered

为你工作

输出:

0         [123]
1         [456]
2    [456, 123]
3         [123]
4         [456]
5    [456, 123]
Name: c, dtype: object

天啊!!!我不知道
'unique'
是一个可以接受的参数!非常感谢你+1.你能链接到你找到这个的文档吗?或者你知道吗?我不记得有什么医生提到过。根据我的经验,您可以
转换
应用
agg
,使用(大多数)函数的名称,例如:
平均值、总和、最小值、标准值,
。有关
groupby
上的函数列表,请参阅。同样,大多数(如果不是全部的话)函数都可以通过它们的名称来调用/应用。我知道常见的函数(
mean,sum,min,std,
),但不知道会列出
unique
。再次非常感谢你。无法理解为什么
pd.Series.unique
不能产生我想要的结果。
test.groupby(['a','b'])['c'].transform('unique')
0         [123]
1         [456]
2    [456, 123]
3         [123]
4         [456]
5    [456, 123]
Name: c, dtype: object