让df成为我们来自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))我希望问题足够清楚。非常感谢!
发布于 2017-03-03 13:58:07
您可以使用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接受函数参数的许多内容,因此它相当灵活。从医生那里,用于聚合组的arg函数目前可以是:
https://stackoverflow.com/questions/42580696
复制相似问题