首页 > 解决方案 > python中的命名lambda函数用于pandas的agg函数

问题描述

下面的代码

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 函数,以便将名称<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    |

标签: pythonpandaslambda

解决方案


“命名” lambda 函数的唯一另一种方法如下:
它有点类似于第二个选项,但更简洁。

pct30 = lambda x: x.quantile(0.3)

df[['B', 'C']].agg([min, pct30, max])

给出相同的输出

            B   C
min         1.0 10.0
<lambda>    2.2 22.0
max         8.0 80.0

推荐阅读