J'ai un DataFrame à 2 colonnes, la colonne 1 correspond au client, la colonne 2 correspond à la ville que ce client a visité. La trame de données se présente comme suit:Pandas Python: comment convertir une liste de mappages de paires en format ligne-vecteur?
print(df)
customer visited_city
0 John London
1 Mary Melbourne
2 Steve Paris
3 John New_York
4 Peter New_York
5 Mary London
6 John Melbourne
7 John New_York
Je voudrais convertir le dataframe ci-dessus dans un format vecteur-ligne, de sorte que chaque ligne représente un utilisateur unique avec le vecteur de ligne indiquant les villes visitées.
print(wide_format_df)
London Melbourne New_York Paris
John 1.0 1.0 1.0 0.0
Mary 1.0 1.0 0.0 0.0
Steve 0.0 0.0 0.0 1.0
Peter 0.0 0.0 1.0 0.0
Voici le code que j'ai utilisé pour générer le format large. Il parcourt chaque utilisateur un par un. Je me demandais s'il y avait un moyen plus efficace de le faire?
import pandas as pd
import numpy as np
UNIQUE_CITIESS = np.sort(df['visited_city'].unique())
p = len(UNIQUE_CITIESS)
unique_customers = df['customer'].unique().tolist()
X = []
for customer in unique_customers:
x = np.zeros(p)
city_visited = np.sort(df[df['customer'] == customer]['visited_city'].unique())
visited_idx = np.searchsorted(UNIQUE_CITIESS, city_visited)
x[visited_idx] = 1
X.append(x)
wide_format_df = pd.DataFrame(np.array(X), columns=UNIQUE_CITIESS, index=unique_customers)
wide_format_df
J'ai manqué toute l'action sur celui-ci, l'utilisation intéressante de clip. +1 – Vaishali
Merci @Vaishali – piRSquared
réponse fantastique, merci @piRSquared !!! – cwl