如何更改熊猫groupby.agg函数的输入参数?

蓝宝石

我在将groupby_object.agg()方法与要更改输入参数的函数一起使用时遇到问题。是否有可用的函数名称.agg()接受的资源,以及如何将参数传递给它们?

请参阅以下示例:

import pandas as pd
import numpy as np

df = pd.DataFrame({'numbers': [1, 2, 3, 2, 1, 3], 
               'colors': ['red', 'white', 'blue', 'red', 'white', np.nan], 
               'weight': [10, 10, 20, 5, 10, 20]})

df['colors'].nunique() # Returns 3 as NaN is not counted
df['colors'].nunique(dropna=False) # Returns 4 as NaN is counted

当我为groupby颜色上色时,如何通过dropna=False函数传递参数?

df.groupby('numbers').agg({'colors': 'nunique', 'weight': 'sum'})
洛兹

尽管pandas具有与dict和NamedAggs聚合的漂亮语法,但它们可能会付出巨大的效率成本。的原因是因为,而不是使用内置的GROUPBY方法,该方法被优化和/或在用Cython实现,任何.agg(lambda x: ...).apply(lambda x: ...)将要采取慢得多的路径。

这意味着您应该坚持可以直接引用或通过别名引用的内置插件。只有在万不得已的情况下,您才可以尝试使用lambda

在这种特殊情况下使用

df.groupby('numbers')[['colors']].agg('nunique', dropna=False)

避免

df.groupby('numbers').agg({'colors': lambda x: x.nunique(dropna=False)})

此示例表明,尽管输出相等,并且看似很小的变化,但在性能方面会产生巨大的后果,尤其是当组的数量变大时。

import perfplot
import pandas as pd
import numpy as np

def built_in(df):
    return df.groupby('numbers')[['colors']].agg('nunique', dropna=False)

def apply(df):
    return df.groupby('numbers').agg({'colors': lambda x: x.nunique(dropna=False)})

perfplot.show(
    setup=lambda n: pd.DataFrame({'numbers': np.random.randint(0, n//10+1, n),
                                  'colors': np.random.choice([np.NaN] + [*range(100)])}),
    kernels=[
        lambda df: built_in(df),
        lambda df: apply(df)],
    
    labels=['Built-In', 'Apply'],
    n_range=[2 ** k for k in range(1, 20)],
    equality_check=np.allclose,  
    xlabel='~N Groups'
)

在此处输入图片说明


但是您想要进行多个聚合并使用不同的列

.groupby()groupby部分实际上并没有做那么多。它只是确保映射是正确的。因此,尽管不直观,但与内置函数单独聚合并最终将结果连接起来仍然比使用lambda进行更简单的命令聚合要快得多。

这也是一个想要sum权重列的示例,我们可以看到,尽管需要手动加入,但拆分速度仍然快得多

def built_in(df):
    return pd.concat([df.groupby('numbers')[['colors']].agg('nunique', dropna=False),
                      df.groupby('numbers')[['weight']].sum()], axis=1)

def apply(df):
    return df.groupby('numbers').agg({'colors': lambda x: x.nunique(dropna=False), 
                                      'weight': 'sum'})

perfplot.show(
    setup=lambda n: pd.DataFrame({'numbers': np.random.randint(0, n//10+1, n),
                                  'colors': np.random.choice([np.NaN] + [*range(100)]),
                                  'weight': np.random.normal(0,1,n)}),
    kernels=[
        lambda df: built_in(df),
        lambda df: apply(df)],
    
    labels=['Built-In', 'Apply'],
    n_range=[2 ** k for k in range(1, 20)],
    equality_check=np.allclose,  
    xlabel='~N Groups'
)

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

熊猫,如何使用groupby()/条件函数调用来应用更改数据帧?

来自分类Dev

使用熊猫时如何在函数中输入参数

来自分类Dev

函数的C ++指针参数,如何避免更改输入

来自分类Dev

在Pandas Dataframe中,Groupby.agg()组合多个列作为lambda函数的参数

来自分类Dev

Python-熊猫Groupby AGG

来自分类Dev

Python-熊猫Groupby AGG

来自分类Dev

如何:捕获输入函数异常的可变参数包装函数

来自分类Dev

如何基于输入参数数组在函数内部执行函数?

来自分类Dev

如何使用熊猫计算groupby函数的累积时间?

来自分类Dev

如何使用熊猫计算groupby函数的累积时间?

来自分类Dev

熊猫如何在agg函数后使列扁平化?

来自分类Dev

Java类构造函数更改输入参数-MiniMax

来自分类Dev

熊猫:如何使用.agg()

来自分类Dev

熊猫groupby as列表同时返回agg和apply函数为空

来自分类Dev

如何在D中为函数输入按名称的参数?

来自分类Dev

如何测试PHP按位函数输入参数

来自分类Dev

如何从C#访问以指针作为输入参数的C ++函数

来自分类Dev

如何确定何时应引用rust函数输入参数?

来自分类Dev

输入时如何返回构造函数中的参数

来自分类Dev

如何在dict中捕获函数的输入参数

来自分类Dev

如何根据python中的输入更新函数参数?

来自分类Dev

C++:如何将用户输入作为函数参数?

来自分类Dev

在熊猫中,如何在groupby.agg()方法中应用2个自定义公式?

来自分类Dev

熊猫groupby和agg按条件

来自分类Dev

熊猫.agg()删除列(lambda函数)

来自分类Dev

如何更改外部函数参数

来自分类Dev

如何使用使用参数包和类型名的类作为函数的输入参数(C ++)

来自分类Dev

如何找到一对带有4个输入参数的标量函数值最小的参数?

来自分类Dev

使用.agg()方法时如何传递参数?

Related 相关文章

  1. 1

    熊猫,如何使用groupby()/条件函数调用来应用更改数据帧?

  2. 2

    使用熊猫时如何在函数中输入参数

  3. 3

    函数的C ++指针参数,如何避免更改输入

  4. 4

    在Pandas Dataframe中,Groupby.agg()组合多个列作为lambda函数的参数

  5. 5

    Python-熊猫Groupby AGG

  6. 6

    Python-熊猫Groupby AGG

  7. 7

    如何:捕获输入函数异常的可变参数包装函数

  8. 8

    如何基于输入参数数组在函数内部执行函数?

  9. 9

    如何使用熊猫计算groupby函数的累积时间?

  10. 10

    如何使用熊猫计算groupby函数的累积时间?

  11. 11

    熊猫如何在agg函数后使列扁平化?

  12. 12

    Java类构造函数更改输入参数-MiniMax

  13. 13

    熊猫:如何使用.agg()

  14. 14

    熊猫groupby as列表同时返回agg和apply函数为空

  15. 15

    如何在D中为函数输入按名称的参数?

  16. 16

    如何测试PHP按位函数输入参数

  17. 17

    如何从C#访问以指针作为输入参数的C ++函数

  18. 18

    如何确定何时应引用rust函数输入参数?

  19. 19

    输入时如何返回构造函数中的参数

  20. 20

    如何在dict中捕获函数的输入参数

  21. 21

    如何根据python中的输入更新函数参数?

  22. 22

    C++:如何将用户输入作为函数参数?

  23. 23

    在熊猫中,如何在groupby.agg()方法中应用2个自定义公式?

  24. 24

    熊猫groupby和agg按条件

  25. 25

    熊猫.agg()删除列(lambda函数)

  26. 26

    如何更改外部函数参数

  27. 27

    如何使用使用参数包和类型名的类作为函数的输入参数(C ++)

  28. 28

    如何找到一对带有4个输入参数的标量函数值最小的参数?

  29. 29

    使用.agg()方法时如何传递参数?

热门标签

归档