【发布时间】:2019-08-16 14:55:04
【问题描述】:
我想在超过 500,000 行的数据框中逐行计算中位数。目前我正在使用np.median,因为 numpy 已经过优化,可以在单核上运行。它仍然很慢,我想找到一种并行计算的方法
具体来说,我有 N 大小为 13 x 500,000 的表,并且对于每个表,我想添加列 Q1、Q3 和中值,以便每一行的中值列包含该行的中值。所以我必须计算N * 500,000 中值。
我尝试使用numexpr,但似乎不可能。
编辑: 事实上,我还需要 Q1 和 Q3,所以我不能使用不允许计算四分位数的统计模块。这是我目前计算中位数的方法
q = np.transpose(np.percentile(data[row_array], [25,50,75], axis = 1))
data['Q1_' + family] = q[:,0]
data['MEDIAN_' + family] = q[:,1]
data['Q3_' + family] = q[:,2]
EDIT 2我通过使用下面提出的中位数算法的中位数解决了我的问题
【问题讨论】:
-
你试过这个吗?
import statistics statistics.median(items) -
看问题的编辑部分,谢谢你的回答
-
Q1 是最低值的中位数和数据集的中位数,可以这样计算。
-
好吧,我不知道,但我认为从计算时间的角度来看,像这样一次计算 3 仍然更有趣。事实上,为了加快计算速度,我正在考虑并行化操作,但我不知道该怎么做
-
它总是有 3 列吗?
标签: python multithreading numpy median