web-dev-qa-db-fra.com

Comment concater plusieurs Pandas colonnes DataFrame avec un séparateur de jeton différent?

J'essaye de concaténer plusieurs Pandas colonnes DataFrame avec différents jetons.

Par exemple, mon ensemble de données ressemble à ceci:

dataframe = pd.DataFrame({'col_1' : ['aaa','bbb','ccc','ddd'], 
                          'col_2' : ['name_aaa','name_bbb','name_ccc','name_ddd'], 
                          'col_3' : ['job_aaa','job_bbb','job_ccc','job_ddd']})

Je veux sortir quelque chose comme ceci:

    features
0   aaa <0> name_aaa <1> job_aaa
1   bbb <0> name_bbb <1> job_bbb
2   ccc <0> name_ccc <1> job_ccc
3   ddd <0> name_ddd <1> job_ddd

Explication:

concattez chaque colonne avec "<{}>" où {} sera des nombres croissants.

Ce que j'ai essayé jusqu'à présent:

Je ne veux pas modifier le DataFrame d'origine, j'ai donc créé deux nouveaux dataframe:

features_df = pd.DataFrame()
final_df    = pd.DataFrame()
for iters in range(len(dataframe.columns)):
    features_df[dataframe.columns[iters]] = dataframe[dataframe.columns[iters]] + ' ' + "<{}>".format(iters)
final_df['features'] = features_df[features_df.columns].agg(' '.join, axis=1)

Il y a un problème auquel je suis confronté, il ajoute enfin <2> mais je veux une sortie comme ci-dessus, ce n'est pas non plus la façon de panda de faire cette tâche, comment je peux la rendre plus efficace?

16
Aaditya Ura
df['features'] = [" ".join(F"{entry}<{num}>" 
                  if ent[-1] != entry 
                  else entry 
                  for num, entry in enumerate(ent) )
                  for ent in df.to_numpy()]



   col_1   col_2      col_3         features
0   aaa   name_aaa  job_aaa aaa<0> name_aaa<1> job_aaa
1   bbb   name_bbb  job_bbb bbb<0> name_bbb<1> job_bbb
2   ccc   name_ccc  job_ccc ccc<0> name_ccc<1> job_ccc
3   ddd   name_ddd  job_ddd ddd<0> name_ddd<1> job_ddd
3
sammywemmy