pandas - 使用带有自己的函数和参数的 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,))
解决方案
根据文档,您可以将*args
and传递**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)
推荐阅读
- angular - 在单个节点上显示警告
- flutter - 我在streambuilder [Flutter]中的应用程序中调用了方法'[]'出现空错误
- python - 如何使用 RegEx 在 Python 中设置新字母表?
- android - 是否可以为键盘中的键设置自定义布局?
- reactjs - 处理 Fluent UI React 中的 TextField 更改
- android - 如何使用 GoogleSignInAccount 获取用户的生日和性别?
- wordpress - 您的 Paypal 自适应 AppID
- java - 从Java中的另一个基类方法调用基类方法而无需反射
- reactjs - 如何修复找不到模块'redux'?
- android-studio - 如何在 RecyclerView 中制作 Material CardView、Checkable