提问人:Amin Ba 提问时间:6/1/2021 最后编辑:Amin Ba 更新时间:3/6/2023 访问量:467
python 中命名的 lambda 函数,用于 pandas 的 agg 函数
Named lambda function in python to be used in pandas' agg function
问:
代码如下
df = pd.DataFrame({
'A': ['a', 'b', 'a', 'b', 'b'],
'B': [1, 2, 3, 4, 8],
'C': [10, 20, 30, 40, 80]})
df[['B', 'C']].agg([min, lambda x: x.quantile(0.3), max])
返回:
| | B C |
| -------- | -------------- |
| min | 1.0 10.0 |
| <lambda> | 2.2 22.0 |
| max | 8.0 80.0 |
问题:*
有什么方法可以命名 lambda 函数,以便将名称替换为 sth 有意义?<lambda>
类似于下面编写的代码(这是伪代码,不起作用):
df[['B', 'C']].agg([min, def pct30(x): return x.quantile(0.3), max])
而不是:
def pct30(x):
return x.quantile(0.3)
df[['B', 'C']].agg([min, pct30, max])
返回:
| | B C |
| -------- | -------------- |
| min | 1.0 10.0 |
| pct30 | 2.2 22.0 |
| max | 8.0 80.0 |
答:
0赞
cautree
3/6/2023
#1
首先定义一个 lambda 函数,然后使用 _ name _
评论
0赞
Andreas Sabelfeld
3/6/2023
补充一点:通常,将 lambda 函数分配给变量不是一个好做法。相反,您应该像以前一样创建一个函数。但我认为你不应该严格遵循这些好的做法,使用一些读起来感觉好的东西。在这种情况下,我发现一个更容易看的功能。
0赞
chepner
3/6/2023
这样做是没有意义的,而不是简单地使用语句来定义 ,这将自动设置。def
quantile30
__name__
4赞
chepner
3/6/2023
另外,不要发布代码图像;将代码发布为文本。
评论
df.index.str.replace("<lambda>", "pct30")
def named_anon(name, func): setattr(func, "__name__", name); return func
df[['B', 'C']].agg([min, named_anon("pct30", lambda x: x.quantile(0.3), max)])