回答this question结果发现{
数据:
df = pd.DataFrame({
'user_id': [1, 2, 3, 4, 1, 2, 3],
'class_type': ['Krav Maga', 'Yoga', 'Ju-jitsu', 'Krav Maga',
'Ju-jitsu','Krav Maga', 'Karate'],
'instructor': ['Bob', 'Alice','Bob', 'Alice','Alice', 'Alice','Bob']})
演示:
^{pr2}$我希望这里也有同样的行为-你知道我遗漏了什么吗?在
这里发生的是
set
没有被处理,因为它不是_aggregate
中的is_list_like
:见source
这不是
^{pr2}$is_list_like
,因此它返回None
在调用链上结束于以下行:见source
{{cd6}
这就引发了:
见source
因此,由于没有结果,我们最后调用
_aggregate_generic
:见source
然后调用:
见source
结果是:
我运行的是一个稍微不同的pandas版本,但是等效的源代码行是https://github.com/pandas-dev/pandas/blob/v0.22.0/pandas/core/groupby.py#L3779
所以本质上,因为
set
不算作函数或iterable,它只是折叠为调用iterable系列上的ctor(在本例中是列),您可以在这里看到相同的效果:但是,当您使用
lambda
这是一个匿名函数时,它的工作与预期的一样。在也许正如@Edchum注释的那样,
agg
应用了python内置函数,将groupby对象视为一个小数据帧,而当传递一个已定义的函数时,它将其应用于每一列。通过这个例子来说明。在希望这就是为什么应用set会得到上述结果的原因。在
相关问题 更多 >
编程相关推荐