我正在使用pandas groupby并希望应用该功能从组中的项目创建一个集合。
以下不起作用:
df = df.groupby('col1')['col2'].agg({'size': len, 'set': set})
但是以下工作:
def to_set(x):
return set(x)
df = df.groupby('col1')['col2'].agg({'size': len, 'set': to_set})
根据我的理解,这两个表达式是相似的,第一个不起作用的原因是什么?
答案 0 :(得分:8)
这是因为set
属于type
type
,而to_set
属于type
function
:
type(set)
<class 'type'>
def to_set(x):
return set(x)
type(to_set)
<class 'function'>
根据docs,.agg()
期望:
arg:
function
或dict
用于聚合组的功能。
如果
function
,则必须在传递DataFrame
或传递给DataFrame.apply
时有效dict
。如果传递
DataFrame
,则密钥必须为string
列 名。接受的组合是:
function
cythonized function name
list
dict
函数
dict
列 - &gt;功能名称的嵌套
Button btn = new Button(); btn.
- &gt;职能部门
答案 1 :(得分:2)
如果出现以下错误,请更新更新版本的 Pandas
SpecificationError: nested renamer is not supported
df = df.groupby('col1')['col2'].agg(size= len, set= lambda x: set(x))
答案 2 :(得分:0)
尝试使用:
df = df.groupby('col1')['col2'].agg({'size': len, 'set': lambda x: set(x)})
为我工作。