Python中如何按列分组和按自己的函数汇总

2024-04-23 13:40:31 发布

您现在位置:Python中文网/ 问答频道 /正文

让df作为我们来自熊猫的测试数据框:

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分组,类似于:

^{pr2}$

那很好。现在,我不想使用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))

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


Tags: 函数importdffooasnpbarrandom
1条回答
网友
1楼 · 发布于 2024-04-23 13:40:31

您可以使用^{}并将自定义函数放在lambda中,例如

>>> df.groupby('A').C.agg(lambda x: x.pow(2).sum())
A
bar    3.787664
foo    2.448404
Name: C, dtype: float64

或者您可以单独定义它并将其传递给agg。在

^{pr2}$

还要注意,agg接受函数参数的很多东西,因此它相当灵活。From the docs,用于聚集组的arg函数目前可以是:

  • 字符串cythonized函数名
  • 功能
  • 功能列表
  • 列dict->;函数
  • 名称嵌套dict->;函数dicts

相关问题 更多 >