There is a mismatch between the shape the MinMaxScaler()
expected (based on the fit) and what you provided after the clustering (which has one more column the cluster membership). You could assign the cluster labels directly to the original data or if you really need to do the inverse then you could do it by first inverse_transform
the scaled data again and then add the cluster labels to it. The both result in the same dataframe.
# Import the packages
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.preprocessing import MinMaxScaler
from sklearn.cluster import KMeans
# Load the data
data = pd.DataFrame(load_iris()['data'])
# Initialize a scaler
scaler = MinMaxScaler()
# Perform scaling
data_scaled = pd.DataFrame(scaler.fit_transform(data))
# Initialize KMeans clustering
kmeans = KMeans(n_clusters=3, random_state=42)
# Obtain the clusters
clusters = kmeans.fit_predict(data_scaled)
# Add the cluster labels to the original data
data['clusters'] = clusters
OR
# Inverse the scaling and add the cluster labels as a new column
data_invscaled = pd.DataFrame(scaler.inverse_transform(data_scaled.iloc[:, 0:4]))
data_invscaled['clusters'] = clusters
# Check whether the two dfs are equal --> None means that the two dfs are equal
print(pd.testing.assert_frame_equal(data, data_invscaled, check_dtype=False))