DataFrame.groupby.agg(list)可以工作,但agg('list')不能工作

2024-09-30 16:29:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将Listag在SQL中的功能应用到pandas中

为什么下面的工作

DataFrame.groupby.agg(list) 

但以下情况却并非如此

DataFrame.groupby.agg('list')

我正在转换以下数据: Digital tracking data

enter image description here


Tags: 数据功能dataframepandassql情况agglist
2条回答

我查看了pandas源代码,发现至少在聚合pandas系列时,字符串函数名通过调用

if isinstance(func, str):
    return getattr(self, func)(*args, **kwargs)

其中selfSeriesGroupBy的实例,它是GroupBy的子类。GroupBy类有许多方法可用于聚合(包括countmeanmedian等)^另一方面,{}当然不是GroupBy的方法,而是一个内置的Python函数,因此调用getattr()时找不到它。我假设DataFrameGroupBy也是这样,因为它也是GroupBy的一个子类

以类似的方式,.agg()在作为字符串提供时将无法使用任何用户定义的函数名

有关提供给.agg()的所有可用字符串的列表,请查看this article in the pandas documentation

  • 如果.agg()方法的参数是函数的名称(即不是名称为的字符串),则它必须是Python的已知名称,i。E标准、导入或您自己的函数。
    (在您的例子中,list是标准的Python函数。)

  • 如果.agg()方法的参数是字符串,则

    1. 如果具有该名称的方法存在,则使用GroupBy类的方法
      (在您的例子中,没有GroupBy类的.list()方法)
    2. 如果存在具有此名称的函数,则使用具有此名称的NumPy函数 (在您的情况下,没有函数numpy.list()

如您所见,如果参数是一个字符串,Pandas将忽略Python已知的函数

相关问题 更多 >