100列と100,000行のデータセットがあります。最大値(例: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