Skip to main content
 首页 » 编程设计

python之Pandas Groupby : How to use two lambda functions

2025年05月04日12insus

我目前可以在 Pandas 中执行以下操作,但 FutureWarning 严厉批评我:

grpd = df.groupby("rank").agg({ 
    "mean": np.mean, "meian": np.median, "min": np.min, "max": np.max,  
    "25th percentile": lambda x: np.percentile(x, 25), 
    "75th percentile": lambda x: np.percentile(x, 75) 
}) 

以下会引发错误,因为我有两个 lambda 函数:

percentile_25 = lambda x: np.percentile(x, 25) 
percentile_75 = lambda x: np.percentile(x, 75) 
 
df = diffs[["User Installs", "rank"]].dropna() 
grpd = df.groupby("shopping_rank").agg([ 
    np.mean, np.median, np.min, np.max,  
    percentile_25, percentile_75 
]) 

抛出:

SpecificationError: Function names must be unique, found multiple named <lambda> 

我似乎可以完成这项工作的唯一方法(不忽略警告,我可能应该这样做)是使用如下所示的精心设计的过程

  1. 用一个 lambda 函数(第 25 个百分位数)和我需要的所有其他东西(最小值、最大值等)定义我的 DF
  2. 重命名列以摆脱 MultiIndex
  3. 创建另一个 DF,进行另一个分组,这次使用我想要的另一列(第 75 个百分位数)
  4. 再次重命名 cols(感谢 MultiIndex!)
  5. 在索引上加入回原来的DF

我在这里缺少什么吗?当然有更好的方法来做我认为很常见的事情(使用两个不能直接从 numpy 导入的聚合)。

请您参考如下方法:

这是一个known bug ,使用:

def percentile_25(x): return np.percentile(x, 25) 
def percentile_75(x): return np.percentile(x, 75)