import pandas as pd from sklearn.cluster import HDBSCAN def cluster_dynamics(data: pd.DataFrame): data = data \ .drop(['genotype', 'type'], axis=1) data_scan = data \ .copy() \ .drop('concentration_new', axis=1) \ .pivot(index=['locus_name'], values='concentration_scaled', columns='condition_new') \ .rename_axis(None, axis=1) \ .reset_index() X = data_scan.iloc[:,1:] Y = data_scan.iloc[:,:1] hdb = HDBSCAN(min_cluster_size=3) hdb.fit(X) Y['cluster'] = hdb.labels_ data = pd.merge(data, Y, on = ['locus_name'], how = 'left') return data