Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:应用自定义聚合函数(不带groupby)_Python_Pandas_Numpy_Numpy Ufunc - Fatal编程技术网

Python 熊猫:应用自定义聚合函数(不带groupby)

Python 熊猫:应用自定义聚合函数(不带groupby),python,pandas,numpy,numpy-ufunc,Python,Pandas,Numpy,Numpy Ufunc,我们可以考虑对一个系列应用两种类型的函数:转换和聚合。他们在文件中对此进行了区分;变换映射序列中的单个值,而聚合以某种方式汇总整个序列(例如平均值) 很清楚如何使用apply应用转换,但我还没有成功实现自定义聚合。请注意,不涉及groupby,聚合不需要groupby 我正在处理以下情况:我有一个系列,其中每一行都是字符串列表。我可以聚合这些数据的一种方法是统计每个字符串的出现次数,并返回5个最常见的术语 def top_five_strings(series): counter = {

我们可以考虑对一个系列应用两种类型的函数:转换和聚合。他们在文件中对此进行了区分;变换映射序列中的单个值,而聚合以某种方式汇总整个序列(例如平均值)

很清楚如何使用
apply
应用转换,但我还没有成功实现自定义
聚合。请注意,不涉及
groupby
,聚合不需要
groupby

我正在处理以下情况:我有一个
系列
,其中每一行都是字符串列表。我可以聚合这些数据的一种方法是统计每个字符串的出现次数,并返回5个最常见的术语

def top_five_strings(series):
    counter = {}
    for row in series:
        for s in row:
            if s in counter:
                counter[s] += 1
            else:
                counter[s] = 1

    return sorted(s.items(), key=lambda x: x[1])[:5]
如果我把这个函数称为
top\u five\u strings(series)
,它工作得很好,就像我在数字序列上调用了
np.mean(series)
。但是,不同的是我也可以做
series.agg(np.mean)
并得到相同的结果。如果我使用
series.agg(最上面的五个字符串)
,我会得到序列中每一行的前五个字母(如果将单行作为函数的参数,这是有意义的)

我认为关键的区别在于,
np.mean
是一个NumPy
ufunc
,但我还没有弄清楚
\u aggregate
helper函数在源代码中是如何工作的

我还有两个问题:

1) 我可以通过将Python函数设置为
ufunc
来实现这一点吗(如果可以,如何实现)

2) 这是一件愚蠢的事吗?我还没发现有人想做这样的事。然而,在我看来,能够在Pandas框架内实现自定义聚合和自定义转换将是一件非常好的事情(例如,我得到了一个系列,可能需要使用
df.descripe