Pandas:应用自定义聚合功能(不是w / groupby)

时间:2017-11-17 19:18:21

标签: python pandas numpy numpy-ufunc

我们可以考虑将两种类型的函数应用于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),我会在系列的每一行中得到前五个字母(如果你将一行作为函数的参数,这是有意义的。)

我认为关键的区别是np.mean是NumPy ufunc,但我无法弄清楚_aggregate辅助函数在Pandas源中是如何工作的。< / p>

我留下两个问题:

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

2)这是一件愚蠢的事吗?我还没有找到其他人试图做这样的事情。在我看来,能够在Pandas框架内实现自定义聚合以及自定义转换是非常好的(例如,我可以使用df.describe得到一个系列结果。)< / p>

0 个答案:

没有答案