1

我们可以考虑将两种类型的函数应用于 Pandas 系列:转换和聚合。他们在文档中做出了这种区分;转换映射系列中的单个值,而聚合以某种方式总结整个系列(例如平均值)。

apply很清楚如何使用aggregation. 请注意,groupby不涉及,并且聚合不需要groupby.

我正在处理以下情况:我有一个Series其中每一行都是字符串列表。我可以聚合这些数据的一种方法是计算每个字符串的出现次数,并返回 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_five_strings(series),它可以正常工作,就像我调用np.mean(series)了一个数字系列一样。但是,不同之处在于我也可以做到series.agg(np.mean)并得到相同的结果。如果我这样做series.agg(top_five_strings),我会得到 Series 每一行中的前五个字母(如果你将单行作为函数的参数,这很有意义)。

我认为关键的区别在于它np.mean是 NumPy ufunc,但我无法弄清楚_aggregate帮助函数在 Pandas 源代码中的工作原理。

我剩下两个问题:

1)我可以通过使我的 Python 函数成为一个ufunc(如果可以,如何)来实现这一点?

2)这是一件愚蠢的事情吗?我还没有发现其他人试图做这样的事情。然而,在我看来,能够在 Pandas 框架内实现自定义聚合以及自定义转换(例如,我得到一个 Series 作为结果,就像使用df.describe.

4

0 回答 0