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