使用大数据集,如果最大值高于其他值的中值,如何打印最大值

使用大数据集,如果最大值高于其他值的中值,如何打印最大值

我有一个包含 100 列和 100k 行的数据集。如果最大值(例如:g1 的 20.17)比其余中值(0.21 和 0.57)高 2 倍,如何打印最大值及其相应的行和列名称。这应该对每个行名称单独执行,并且不应计算中位数,包括最大数字,而应计算其余数字。

仅供参考:这已经之前回答过但使用只有很少列和行的小型数据集。

输入样本

name    s1  s2  s3
g1  20.17   0.21    0.57
g2  0.19    0.19    94.0
g3  0.15    0.21    0.26
g4  0.09    0.19    0.16
g5  0.019   0.19    0
g7  2.28    0   0 

样本输出

g1  s1  20.17
g2  s3  94.0
g7  s1  2.28

答案1

您被标记为awk,希望 Python 会有用。

代码:

# !/usr/bin/python
import operator
import sys

with open(sys.argv[1], 'rU') as f:
    header = next(f).split()
    for line in f:
        data = line.split()
        numbers = [float(i) for i in data[1:]]
        max_index, max_value = max(
            enumerate(numbers), key=operator.itemgetter(1))

        del numbers[max_index]
        half = len(numbers) >> 1
        numbers.sort()
        if len(numbers) % 2:
            median = numbers[half]
        else:
            median = sum(numbers[half-1:half+1]) / 2.0

        if max_value > median * 2:
            print('{}\t{}\t{}'.format(
                data[0], header[max_index+1], max_value))

结果:

g1  s1  20.17
g2  s3  94.0
g5  s2  0.19
g7  s1  2.28

相关内容