Skip to content

Instantly share code, notes, and snippets.

@thistleknot
Created March 11, 2023 23:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thistleknot/f400d5026085fa1c34c788f8345df12b to your computer and use it in GitHub Desktop.
Save thistleknot/f400d5026085fa1c34c788f8345df12b to your computer and use it in GitHub Desktop.
find forward max flow correlation path
def find_max_flow_pairs(corr_matrix):
#corr_matrix = correlations_masked.copy()
#def find_max_flow_pairs(corr_matrix):
sorted_melted_correlations = corr_matrix.reset_index().melt(id_vars='index').replace('',np.nan).sort_values(by='value',ascending=False)
#sorted_melted_correlations = corr_matrix.sort_values(by=['value'],ascending=False)
sorted_melted_correlations_copy = sorted_melted_correlations.copy()
max_flow_pairs = []
nextmaxsorter = ''
while (len(sorted_melted_correlations_copy)>1):
if(nextmaxsorter==''):
#print("if")
max_score_row = sorted_melted_correlations_copy[sorted_melted_correlations_copy['value'] == sorted_melted_correlations_copy['value'].max()]
paira = max_score_row['index'].values[0]
pairb = max_score_row['Symbol'].values[0]
score = max_score_row['value'].values[0]
#print(max_score_row)
#remove paira and pairb from next max calculation
index_to_remove = sorted_melted_correlations_copy.index[(sorted_melted_correlations_copy['index'] == paira) & (sorted_melted_correlations_copy['Symbol'] == pairb)].tolist()
sorted_melted_correlations_copy.drop(index=index_to_remove, inplace=True)
index_to_remove_2 = sorted_melted_correlations_copy.index[(sorted_melted_correlations_copy['index'] == pairb) & (sorted_melted_correlations_copy['Symbol'] == paira)].tolist()
sorted_melted_correlations_copy.drop(index=index_to_remove_2, inplace=True)
max_score_rows_a = sorted_melted_correlations_copy[sorted_melted_correlations_copy['index']==paira].head(1)
#print(max_score_rows_a)
max_score_rows_b = sorted_melted_correlations_copy[sorted_melted_correlations_copy['index']==pairb].head(1)
#print(max_score_rows_b)
#reduce sorted_melted_correlations_copy by removing elements with matching index and symbol names of the matching pair name that had the higher value
if(max_score_rows_a['value'].values[0]>max_score_rows_b['value'].values[0]):
removing = paira
following = pairb
nextmaxsorter = following
else:
removing = pairb
following = paira
nextmaxsorter = following
#print("removing:", removing)
#print("following:", following)
index_to_remove3 = sorted_melted_correlations_copy.index[(sorted_melted_correlations_copy['index'] == removing) | (sorted_melted_correlations_copy['Symbol'] == removing)].tolist()
#print("remove index:", index_to_remove3)
sorted_melted_correlations_copy.drop(index=index_to_remove3, inplace=True)
#print(np.sum(sorted_melted_correlations_copy['index']==removing)+np.sum(sorted_melted_correlations_copy['Symbol']==removing))
set_ = [removing, following, score]
else:
#print(nextmaxsorter)
max_score_row = sorted_melted_correlations_copy[sorted_melted_correlations_copy['index']==nextmaxsorter].sort_values(by='value',ascending=False).head(1)
removing = nextmaxsorter
#print("removing:", removing)
following = max_score_row['Symbol'].values[0]
#print("following:", following)
score = max_score_row['value'].values[0]
#print(max_score_row)
#remove paira and pairb from next max calculation
index_to_remove = sorted_melted_correlations_copy.index[(sorted_melted_correlations_copy['index'] == removing) & (sorted_melted_correlations_copy['Symbol'] == following)].tolist()
sorted_melted_correlations_copy.drop(index=index_to_remove, inplace=True)
index_to_remove_2 = sorted_melted_correlations_copy.index[(sorted_melted_correlations_copy['index'] == following) & (sorted_melted_correlations_copy['Symbol'] == removing)].tolist()
sorted_melted_correlations_copy.drop(index=index_to_remove_2, inplace=True)
#print('outside removing',removing)
index_to_remove3 = sorted_melted_correlations_copy.index[(sorted_melted_correlations_copy['index'] == removing) | (sorted_melted_correlations_copy['Symbol'] == removing)].tolist()
#print("remove index:", index_to_remove3)
sorted_melted_correlations_copy.drop(index=index_to_remove3, inplace=True)
#print(np.sum(sorted_melted_correlations_copy['index']==removing)+np.sum(sorted_melted_correlations_copy['Symbol']==removing))
nextmaxsorter = following
set_ = [removing, following, score]
#print("following:", following)
#print(max_score_row)
max_flow_pairs.append([*set_,len(sorted_melted_correlations_copy)])
#print(set_)
#max_flow_pairs.append([sorted_melted_correlations_copy['index'].values[0],sorted_melted_correlations_copy['Symbol'].values[0],sorted_melted_correlations_copy['value'].values[0],1])
return(max_flow_pairs)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment