让我们来自Pandas的测试数据框架:
import pandas as pd
import numpy as np
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar','foo', 'bar', 'foo', 'foo'],
'B' : ['one', 'one', 'two', 'three','two', 'two', 'one', 'three'],
'C' : np.random.randn(8),
'D' : np.random.randn(8)})
我现在想要做的事实上就是按照A
栏来分组,例如:
df.groupby(['A'])['C'].sum()
工作正常。现在我没有使用sum()
而是想要应用自己的函数来有效地汇总数据。
R中的等价物是:
require(plyr); require(dplyr)
df = data.frame(A = c('foo', 'bar', 'foo', 'bar','foo', 'bar', 'foo', 'foo'),
B = c('one', 'one', 'two', 'three','two', 'two', 'one', 'three'),
C = rnorm(8),
D = rnorm(8))
例如,此函数名为myfun
:
myfun <- function(x){sum(x**2)}
然后:
df %>%
group_by(A) %>%
summarise(result = myfun(C))
我希望这个问题很清楚。非常感谢!
答案 0 :(得分:3)
您可以使用agg
并将自定义函数放在lambda中,例如
>>> df.groupby('A').C.agg(lambda x: x.pow(2).sum())
A
bar 3.787664
foo 2.448404
Name: C, dtype: float64
或者您可以单独定义它并将其传递给agg
。
def sum2(x):
return x.pow(2).sum()
>>> df.groupby('A').C.agg(sum2)
A
bar 3.787664
foo 2.448404
Name: C, dtype: float64
另请注意,agg
接受函数参数的许多内容,因此它非常灵活。 From the docs,用于聚合群组的arg
函数目前可以是: