web-dev-qa-db-ja.com

複数のPandas DataFrame列を異なるトークンセパレーターで連結する方法は?

複数のPandas DataFrame列を異なるトークンで連結しようとしています。

たとえば、私のデータセットは次のようになります。

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']})

このようなものを出力したい:

    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

説明 :

各列を "<{}>"で連結します。ここで、{}は増加する数字になります。

これまでに試したこと:

元のDataFrameを変更したくないので、2つの新しいデータフレームを作成しました。

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)

私が直面している問題があります、それは最後に<2>を追加していますが、上記のような出力が必要です。また、これはこのタスクを実行するパンダの方法ではありません。どうすればより効率的にすることができますか?

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