Pandas groupby并制作一套物品

时间:2016-06-01 15:14:01

标签: python pandas

我正在使用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})

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

3 个答案:

答案 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:functiondict

     

用于聚合组的功能。

     
      
  • 如果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)})

为我工作。