Concaténer toutes les colonnes dans une pandas dataframe
J'ai plusieurs pandas dataframe qui peut avoir un nombre différent de colonnes et le nombre de ces colonnes varient généralement de 50 à 100. J'ai besoin de créer une dernière colonne qui est tout simplement de toutes les colonnes concaténées. Fondamentalement, la chaîne dans la première rangée de la colonne doit être la somme(concaténation) des cordes sur la première ligne de toutes les colonnes. J'ai écrit la boucle ci-dessous, mais je pense que cela pourrait être une meilleure façon la plus efficace de le faire. Toutes les idées sur la façon de faire
num_columns = df.columns.shape[0]
col_names = df.columns.values.tolist()
df.loc[:, 'merged'] = ""
for each_col_ind in range(num_columns):
print('Concatenating', col_names[each_col_ind])
df.loc[:, 'merged'] = df.loc[:, 'merged'] + df[col_names[each_col_ind]]
OriginalL'auteur Clock Slave | 2017-03-14
Vous devez vous connecter pour publier un commentaire.
Solution avec
somme
, mais la sortie estfloat
, afin de convertir àint
etstr
est nécessaire:Une autre solution avec
apply
fonctionjoin
, mais il le slowiest:Dernier très rapide
numpy solution
- convertirnumpy array
et puis "somme":Timings:
MODIFIER Si dtypes de certaines colonnes ne sont pas
object
(évidemmentstring
s) fonte parDataFrame.astype
:OriginalL'auteur jezrael
Nous donne:
De sélectionner un ensemble de colonnes:
Cependant, j'ai remarqué que l'approche peut parfois entraîner
NaN
s étant peuplées où ils ne devraient pas, voici donc une autre façon:Mais il convient de noter que cette approche est beaucoup plus lente:
Contre
OriginalL'auteur blacksite
Je n'ai pas assez de réputation pour le commentaire, donc je suis en train de construire ma réponse hors de blacksite réponse.
Pour plus de clarté, la boîte à lunch a fait observer qu'il a échoué pour Python 3.7.0. Elle n'a pas pour moi sur Python 3.6.3. Voici l'original de la réplique par blacksite:
Voici ma modification pour Python 3.6.3:
OriginalL'auteur bodily11
Les solutions données ci-dessus que l'utilisation des tableaux numpy ont travaillé très bien pour moi.
Cependant, une chose d'être prudent, c'est l'indexation lorsque vous obtenez la
numpy.ndarray
dedf.values
, depuis les étiquettes de l'axe sont retirés dedf.values
.Donc, pour prendre l'une des solutions proposées ci-dessus (celui que j'utilise le plus souvent) comme un exemple:
Cette partie:
ne permet pas de conserver les indices de l'origine
DataFrame
. Pas un problème lorsque laDataFrame
a la commune0, 1, 2, ...
ligne schéma d'indexation, mais cette solution ne fonctionnera pas lorsque leDataFrame
est indexée dans aucun autre manière. Vous pouvez résoudre ce problème en ajoutant uneindex=
argumentpd.Series()
:J'ai toujours ajouter le
index=
argument, juste pour être sûr, même si je suis sûr que leDataFrame
de ligne est indexé comme0, 1, 2, ...
OriginalL'auteur nick_montpetit