首页 > 解决方案 > 使用带有自己的函数和参数的 Pandas 数据框 groupby.filter

问题描述

我想用我自己的过滤器函数过滤我的数据框,它需要一个对象作为参数

def my_filter_function(df: pd.DataFrame, my_arg: object) -> bool:

我知道我可以做到以下几点

df.groupby('column_name').filter(lambda group_df: my_filter_function(group_df, my_arg))

但我想知道有一种方法可以以某种方式简单地将 my_arg 作为参数传递,my_filter_function 可以在不使用 lambda 表达式的情况下使用它。

例如,像这样的东西,但它不起作用:

df.groupby('column_name').filter(my_filter_function, args=(my_arg,))

标签: pandas

解决方案


根据文档,您可以将*argsand传递**kwargs给该函数。这是 python 中的一个选项,它允许函数收集传递的所有附加参数(*args对于常规参数,**kwargs对于关键字参数)。然后它可以将这些参数传递给接收的函数。

最简单的方法是添加一个关键字参数,它将被 捕获**kwargs,如下所示:

df.groupby('column_name').filter(my_filter_function, my_arg=my_arg)

您还可以添加一个常规参数(将被 捕获*args),但您需要事先指定所有其他参数。过滤器只有 2 个参数 - 函数和 dropna。如果您指定dropna(其默认值为True),则可以添加将传递给您的函数的参数:

df.groupby('column_name').filter(my_filter_function, True, my_arg)

推荐阅读