【发布时间】:2020-06-18 20:27:34
【问题描述】:
尝试搜索,但没有找到任何相关内容。假设我们有一个包含偶数个数的序列,我们想计算它的中位数:
pd.Series([4, 6, 8, 10]).median()
因为我们有偶数个元素,所以没有元素正好在中间,因此该方法执行计算:(6 + 8) / 2 = 7。但是,对于我的目的,非常重要的是中位数是系列中已经存在的数字,不能从头开始计算。所以我宁愿选择 6 或 8 而不是使用 7。
其中一种可能的解决方案是检测存在偶数个元素的事实,在这种情况下,添加另一个保证为最大或最小的元素,然后在我得到中位数。但是即使对于一个系列的情况,这种解决方案也显得相当笨拙。如果我们要处理的是 SeriesGroupBy 对象,其中必须为每个组分别计算这样的中位数,我什至无法想象如何实现它。
看起来median() 方法中没有参数使它选择两个最近的元素之一而不是除法,而且我找不到任何可以替代median() 方法的替代方法。实现我自己的中值函数是我唯一的选择吗?
【问题讨论】:
-
一定要用pandas吗?
-
我找不到其他方法。但是定义一个函数非常容易。
-
没有熊猫它只是
sorted(l)[len(l)//2] -
@Barmar 实际上是
sorted(l)[ceil(len(l)/2)]。如果使用sorted(l)[len(l)//2],当列表元素个数为奇数时,会返回不准确的中位数。