Pandas groupby并制作一套物品

use*_*531 8 python pandas

我正在使用pandas groupby并希望应用该功能从组中的项目创建一个集合.

以下不起作用:

df = df.groupby('col1')['col2'].agg({'size': len, 'set': set})
Run Code Online (Sandbox Code Playgroud)

但以下工作:

def to_set(x):
    return set(x)

df = df.groupby('col1')['col2'].agg({'size': len, 'set': to_set})
Run Code Online (Sandbox Code Playgroud)

在我的理解中,这两个表达式是相似的,第一个不起作用的原因是什么?

Ste*_*fan 9

这是因为set是的type type,而to_set是type function:

type(set)
<class 'type'>

def to_set(x):
    return set(x)

type(to_set)

<class 'function'>
Run Code Online (Sandbox Code Playgroud)

根据文档,.agg()预计:

arg:function或dict

用于聚合组的功能.

  • 如果a function,必须在传递a DataFrame或传递时工作 DataFrame.apply.

  • 如果传递a dict,则键必须是DataFrame列名.

接受的组合是:

  • string cythonized函数名称
  • function

  • list 功能

  • dict 列 - >函数

  • 嵌套dict名称 - >功能的dicts


小智 5

尝试使用:

df = df.groupby('col1')['col2'].agg({'size': len, 'set': lambda x: set(x)})
Run Code Online (Sandbox Code Playgroud)

为我工作。

  • 如果你像刚才那样抛出一句俏皮话,你就必须包含上下文来解释你做了什么以及为什么它有效。效仿用户 Stefan 的例子,会给你带来更多的同情和支持,而不仅仅是一句台词。你必须让未来的读者能够理解它,这样他们才能从中学习。 (5认同)
  • `'set': lambda x: set(x)` 可以替换为 `'set': set` (2认同)

kin*_*ket 5

如果出现以下错误,请更新 Pandas 的新版本

SpecificationError: nested renamer is not supported
Run Code Online (Sandbox Code Playgroud)
SpecificationError: nested renamer is not supported
Run Code Online (Sandbox Code Playgroud)