2 votes

Les pandas : Ajouter des données de plusieurs lignes dans des colonnes supplémentaires pour une seule ligne

J'ai un dataframe pandas comme ceci :

id  value
1   25
2   40
3   30

Idéalement, j'aimerais le convertir de la manière suivante :

id value value_2  value_3
1   25    40       30
2   40    25       30
3   30    25       40

La logique qui sous-tend la conversation ci-dessus est que deux colonnes supplémentaires contenant les valeurs des autres identifiants sont ajoutées.

Dans la première ligne (id=1), value_2 = la valeur de l'id=2, et value_3 = la valeur de l'id = 3.

Dans la deuxième ligne (id=2), value_2 = la valeur de id=1, value_3 = la valeur de id=3

Dans la troisième ligne (id=3), value_2 = la valeur de id=1, value_3 = la valeur de id=2

Existe-t-il une solution qui me permette de mettre à jour toutes les lignes en même temps sans avoir à itérer sur chaque ligne, obtenir la valeur et ensuite mettre à jour le dataframe des autres lignes (une ligne à la fois). Ou quelle est la solution la plus simple pour relever le défi ci-dessus ?

1voto

Dani Mesejo Points 29634

IUUC, vous pourriez faire ce qui suit :

# create array (repeat of value)
repeats = np.tile(df['value'].values, (len(df), 1))

# remove elements from the diagonal
m = repeats.shape[0]
data = repeats[~np.eye(len(df), dtype=bool)].reshape(m, -1)

# create new DataFrame
df2 = pd.DataFrame(data=data[:, :], columns='value_' + df['id'].astype(str)[1:])

# concat old and new data
result = pd.concat([df, df2], axis=1)

print(result)

Sortie

   id  value  value_2  value_3
0   1     25       40       30
1   2     40       25       30
2   3     30       25       40

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X