Я не уверен, отвечу ли я точно, что вы хотите, некоторые части мне непонятны, но, вероятно, небольшие корректировки можно легко внести в l oop.
С помощью pandas
и numpy
,
import pandas as pd
import numpy as np
Мы можем загрузить данные
data = pd.read_csv("data.txt", sep=" ", header=None)
И определить функцию
# https://stackoverflow.com/questions/39915402/combine-a-list-of-pairs-tuples
def make_equiv_classes(pairs):
groups = {}
for (x, y) in pairs:
xset = groups.get(x, set([x]))
yset = groups.get(y, set([y]))
jset = xset | yset
for z in jset:
groups[z] = jset
return set(map(tuple, groups.values()))
И создать наши классы
classes = make_equiv_classes( data.values[:,[1,4]] )
Затем для каждого класса
for cls in classes:
max_cls = 0
print(sorted(cls))
sub_class = data.loc[data[1].isin(cls) | data[4].isin(cls)]
max_class_value = np.max( sub_class.values[:,[2,5]] )
subclass_argmax = np.argmax( np.max( sub_class.values[:,[2,5]], axis=1) )
data_argmax = sub_class.iloc[subclass_argmax][0]
first_letter = sub_class.iloc[subclass_argmax][1]
second_letter = sub_class.iloc[subclass_argmax][4]
print( "Max Class Value: {}".format(max_class_value))
print( "Max Class Number: {}".format(data_argmax))
print( "First letter: {}, Second Letter: {}".format(first_letter, second_letter))
print( "\n")
будет напечатано
['M', 'N', 'O', 'P', 'R', 'S', 'T']
Max Class Value: 2.8129783000000003e-05
Max Class Number: 326
First letter: M, Second Letter: N
['G', 'H']
Max Class Value: 6.216949e-06
Max Class Number: 311
First letter: G, Second Letter: H
['D', 'E', 'F']
Max Class Value: 1.108599e-05
Max Class Number: 4
First letter: D, Second Letter: E
['I', 'J', 'K', 'Q']
Max Class Value: 3.27483e-07
Max Class Number: 366
First letter: I, Second Letter: K
['A', 'B', 'C']
Max Class Value: 3.5937793e-05
Max Class Number: 0
First letter: A, Second Letter: C