У меня очень большой массив данных для панд.Фрейм данных выглядит следующим образом:
>> df
"a_1" "a_2" "b_1" "c_2" ...
"d_1" nan 0.2 nan nan
"d_2" 0.1 nan nan 1
"e_1" nan 1 nan 0.2
"e_2" nan 0.05 0.1 0.7
"f_2" 0.2 0.5 0.3 0.9
...
Теперь я пытаюсь просмотреть список кортежей, который содержит имена строк и столбцов:
t = [("d", "a"), ("d", "c") ...]
Например, когда i = ("d", "a")
Я хочу выяснить значения, соответствующие a_1 and a_2
, d_1 and d_2
, и я использовал следующий код, чтобы найти значения:
s = df.loc[["d_1", "d_2" ], ["a_1", "a_2"]]
# print(s)
# "a_1" "a_2"
# "d_1" nan 0.2
# "d_2 0.1 nan
# convert to list and sort the values
s = s.unstack().reset_index()
s.columns = ["A","B", "Score"]
scores = s.sort_values(by="Score", ascending=False).reset_index(drop=True)
# pick the index(rank) I want and save the not-nan data to dictionary
rank = 1
try:
s = scores.loc[rank,:]
except Exception:
continue
if str(s.Score) != "nan":
d[(s.A, s.B)] = s.Score # output dictionary
Теперь приведенный выше код работает, но занимает слишком много времени, учитывая len(t) = 28350
и мне нужно протестировать 150+ наборов параметров.Одна итерация (один набор параметров) занимает 3,5 минуты на кластере.
Мне интересно, есть ли лучшее решение этой проблемы.Заранее спасибо!