天天看点

python的groupby中函数详解_python – pandas groupby中的聚合函数是否以不同方式处理内置函数?...

在讨论

https://stackoverflow.com/a/47543066/9017455时遇到了这种看似奇怪的行为.

OP有这个数据帧:

x = pd.DataFrame.from_dict({

'cat1':['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C'],

'cat2':['X', 'X', 'Y', 'Y', 'Y', 'Y', 'Z', 'Z']})

并希望为每组cat1值找到唯一的cat2值.

一种选择是聚合并使用lambda来创建一组唯一值:

x.groupby('cat1').agg(lambda x: set(x))

# Returns

cat2

cat1

A {X, Y}

B {Y}

C {Z, Y}

我假设使用set本身就相当于lambda,因为它是可调用的,但是:

x.groupby('cat1').agg(set)

# Returns

cat2

cat1

A {cat1, cat2}

B {cat1, cat2}

C {cat1, cat2}

如果我定义一个合适的函数,我会得到与lambda方法相同的行为,通过这样做,我可以看到pandas调用函数与一个函数.似乎使用DataFrame调用set,因此它在迭代对象时返回列名称集.

这似乎是不一致的行为.谁能解释为什么Pandas对内置函数的处理方式不同?

编辑

查看SeriesGroupBy.agg的行为方式可能会提供更多见解.将任何类型传递给此函数会导致错误“TypeError:’type’对象不可迭代”.

x.groupby('cat1')['cat2'].agg(set)