Python Pandas:将带有参数的多个函数传递给agg()

14

我正在苦苦思索如何结合两种不同的语法来使用 pandas 的 dataframe.agg() 函数。看下面这个简单的数据框:

df = pd.DataFrame({'A': ['group1', 'group1', 'group2', 'group2', 'group3', 'group3'],
                   'B': [10, 12, 10, 25, 10, 12],
                   'C': [100, 102, 100, 250, 100, 102]})

>>> df
[output]
        A   B    C
0  group1  10  100
1  group1  12  102
2  group2  10  100
3  group2  25  250
4  group3  10  100
5  group3  12  102

我知道您可以向agg()发送两个函数,并获得一个新的数据框,其中每个函数被应用于每个列:

df.groupby('A').agg([np.mean, np.std])

[output]
           B                C            
        mean        std  mean         std
A                                        
group1  11.0   1.414214   101    1.414214
group2  17.5  10.606602   175  106.066017
group3  11.0   1.414214   101    1.414214

我知道你可以向单个函数传递参数:

df.groupby('A').agg(np.std, ddof=0)

[output]
          B   C
A              
group1  1.0   1
group2  7.5  75
group3  1.0   1

但是有没有一种方法可以将多个函数与它们的一个或两个参数一起传递呢? 我希望在文档中找到类似于df.groupby('A').agg([np.mean, (np.std, ddof=0)])这样的内容,但迄今为止还没有找到。有什么想法吗?

1个回答

17

嗯,关于 aggregate 的文档确实有点不足。也许可以通过正确传递参数来处理此问题,您可以查看 pandas 的源代码进行了解(也许我以后会这样做)。

但是,您可以轻松地执行以下操作:

df.groupby('A').agg([np.mean, lambda x: np.std(x, ddof=0)])

它同样有效。


聪明!那正是我所需要的。 - BringMyCakeBack
9
传递两个 lambda 函数怎么样?我在头文件方面遇到了问题。 - Dickster
@Dickster 您可以创建一个 lambda 函数并给它自定义名称来避免此问题。请参见此 Stack Overflow 回答 - willk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接