Pandas groupby调用np.median报多元素数组真值不明确错误如何解决
问题产生原因
- 你当前DataFrame的
a列为object数据类型,每个单元格存储的是独立的一维NumPy数组,而非普通数值类型。 np.mean对object类型序列做运算时,只会对不同数组的对应位置做算术运算,不需要对完整数组做大小比较,因此可以正常返回聚合结果。np.median的计算逻辑依赖对输入值的排序和大小比对,当输入是存储了多个数组的object类型序列时,两个数组的大小比对会返回多元素布尔数组,Python无法直接判定整个布尔数组的真值,就会触发你遇到的歧义报错。
解决方案
方案1:最小修改适配原有代码
在聚合前用np.stack()把分组内的多个一维数组合并为标准二维数组,再传入np.median计算即可:
B = df.groupby("b")["a"].apply(lambda x: np.median(np.stack(x), axis=0))
运行后即可得到和np.mean格式一致的中位数聚合结果。
方案2:更符合pandas规范的优化写法
提前把数组拆分为多列数值存储,避免使用object类型存数组,后续聚合操作会更高效稳定:
import numpy as np import pandas as pd a = np.array([[1,9,3],[1,1,1],[8,5,4]]) # 直接把数组按列拆分为独立的数值列 df = pd.DataFrame(a, columns=["a1","a2","a3"]) df["b"] = [1,1,2] # 直接调用pandas内置的median聚合方法,无需自定义lambda B = df.groupby("b").median() print(B)
内容的提问来源于stack exchange,提问作者Raphael
相关产品推荐
相关产品推荐

