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
是一个NumPyufunc
,但我还没有弄清楚\u aggregate
helper函数在源代码中是如何工作的
我还有两个问题:
1) 我可以通过将Python函数设置为ufunc
来实现这一点吗(如果可以,如何实现)
2) 这是一件愚蠢的事吗?我还没发现有人想做这样的事。然而,在我看来,能够在Pandas框架内实现自定义聚合和自定义转换将是一件非常好的事情(例如,我得到了一个系列,可能需要使用df.descripe
)