【问题标题】:Python Pandas: Passing Multiple Functions to agg() with ArgumentsPython Pandas:使用参数将多个函数传递给 agg()
【发布时间】:2014-12-08 20:44:46
【问题描述】:

我正在努力弄清楚如何为 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)]) 的东西,但到目前为止还没有运气。有什么想法吗?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    嗯,docs 实际上有点缺乏。可能有一种方法可以通过正确传递参数来处理这个问题,您可以查看 pandas 的源代码(也许我稍后会)。

    但是,您可以轻松做到:

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

    它也可以正常工作。

    【讨论】:

    • 聪明!这正是我所需要的。
    • 传递 2 个 lambda 函数怎么样?我的标题有问题。
    • @Dickster 你可以创建一个 lambda 函数并给它一个自定义名称来避免这个问题。见this Stack Overflow answer
    猜你喜欢
    • 2017-11-18
    • 2013-07-08
    • 2016-04-02
    • 1970-01-01
    • 2014-03-23
    • 2013-06-28
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    相关资源
    最近更新 更多