gpt4 book ai didi

python - pandas groupby 中的聚合函数是否以不同方式处理内置函数?

转载 作者:太空狗 更新时间:2023-10-30 01:36:32 24 4
gpt4 key购买 nike

在讨论 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 使用 Series 调用该函数。似乎正在使用 DataFrame 调用 set,因此它在遍历对象时返回列名集。

这似乎是不一致的行为。任何人都可以阐明为什么 Pandas 以不同的方式对待内置函数吗?

编辑

查看 SeriesGroupBy.agg 的行为方式可能会提供更多见解。将任何类型传递给此函数都会导致错误“TypeError:'type' object is not iterable”。

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

最佳答案

这种行为现在似乎已经改变了。至少在 0.23.0 版本中,lambda x: set(x)set 的行为相同:

In [6]: x.groupby('cat1').agg(set)
Out[6]:
cat2
cat1
A {Y, X}
B {Y}
C {Y, Z}

In [7]: x.groupby('cat1').agg(lambda x: set(x))
Out[7]:
cat2
cat1
A {Y, X}
B {Y}
C {Y, Z}

我无法肯定地识别更改,但错误 #16405看起来有可疑的相关性(尽管该修复程序已于 2017 年 6 月随 0.20.2 一起发布,早在这个问题出现之前...)。

关于python - pandas groupby 中的聚合函数是否以不同方式处理内置函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47543392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com