我目前可以在 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>
我似乎可以完成这项工作的唯一方法(不忽略警告,我可能应该这样做)是使用如下所示的精心设计的过程
- 用一个 lambda 函数(第 25 个百分位数)和我需要的所有其他东西(最小值、最大值等)定义我的 DF
- 重命名列以摆脱 MultiIndex
- 创建另一个 DF,进行另一个分组,这次使用我想要的另一列(第 75 个百分位数)
- 再次重命名 cols(感谢 MultiIndex!)
- 在索引上加入回原来的DF
我在这里缺少什么吗?当然有更好的方法来做我认为很常见的事情(使用两个不能直接从 numpy 导入的聚合)。
请您参考如下方法:
这是一个known bug ,使用:
def percentile_25(x): return np.percentile(x, 25)
def percentile_75(x): return np.percentile(x, 75)
