以下のコードでデータフレームを生成します。
# importing pandas as pd
import pandas as pd
# Create the dataframe
df = pd.DataFrame({'Category':['A', 'B', 'C', 'D'],
'Event':['Music Theater', 'Poetry Music', 'Theatre Comedy', 'Comedy Theatre'],
'Cost':[10000, 5000, 15000, 2000]})
# Print the dataframe
print(df)
3つの列すべてを組み合わせてリストを生成し、「_」のように空白を削除して、末尾のスペースもすべて削除したい:-
[A_Music_Theater_10000, B_Poetry_Music_5000,C_Theatre_Comedy_15000,D_Comedy_Theatre_2000]
実行時間が問題になるので、最適化された方法で実行したいと思います。したがって、forループを回避しようとしています。誰かが私にこれを達成する方法を教えてもらえますか?
最も一般的な解決策は、すべての値を文字列に変換し、使用join
して最後にすることreplace
です。
df['new'] = df.astype(str).apply('_'.join, axis=1).str.replace(' ', '_')
一部の列のみをフィルタリングする必要がある場合:
cols = ['Category','Event','Cost']
df['new'] = df[cols].astype(str).apply('_'.join, axis=1).str.replace(' ', '_')
または、各列を個別に処理します-必要に応じてreplace
、数値列を文字列に変換します。
df['new'] = (df['Category'] + '_' +
df['Event'].str.replace(' ', '_') + '_' +
df['Cost'].astype(str))
または文字列に変換した後に追加_
、sum
しかし、必要に応じて後に削除tralingを交換する_
ことでrstrip
:
df['new'] = df.astype(str).add('_').sum(axis=1).str.replace(' ', '_').str.rstrip('_')
print(df)
Category Event Cost new
0 A Music Theater 10000 A_Music_Theater_10000
1 B Poetry Music 5000 B_Poetry_Music_5000
2 C Theatre Comedy 15000 C_Theatre_Comedy_15000
3 D Comedy Theatre 2000 D_Comedy_Theatre_2000
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加