首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python中按列分组和按自己的函数进行汇总

问如何在Python中按列分组和按自己的函数进行汇总
EN

Stack Overflow用户
提问于 2017-03-03 13:52:30
回答 1查看 974关注 0票数 2

让df成为我们来自Pandas的测试数据:

代码语言:javascript
复制
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分组,如下所示:

代码语言:javascript
复制
df.groupby(['A'])['C'].sum()

效果很好。现在,我不想使用sum(),而是应用自己的函数来高效地总结数据。

相应的R值为:

代码语言:javascript
复制
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的函数

代码语言:javascript
复制
myfun <- function(x){sum(x**2)}

然后:

代码语言:javascript
复制
df %>% 
   group_by(A) %>% 
   summarise(result = myfun(C))

我希望问题足够清楚。非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-03 13:58:07

您可以使用agg并将自定义函数放在lambda中。

代码语言:javascript
复制
>>> df.groupby('A').C.agg(lambda x: x.pow(2).sum())
A
bar    3.787664
foo    2.448404
Name: C, dtype: float64

或者您可以分别定义它并将其传递给agg。

代码语言:javascript
复制
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函数目前可以是:

  • 字符串细胞化函数名
  • 函数
  • 职能清单
  • 列的dict ->函数
  • 嵌套名称分词->函数分词
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42580696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档