読者です 読者をやめる 読者になる 読者になる

KATOエンジニヤリング開発日誌

「アウトプット無きエンジニアにインプットもチャンスも無い」の精神で書いています

pythonのpandasで列ごとの文字列を連結したいと思ったとき

プログラミング

下記内容のデータフレームがあったときに

Stores Dept Date Value
1 青果 2017-01-01 151
1 鮮魚 2017-01-01 188
1 青果 2017-01-02 153
1 日販 2017-01-02 284
1 鮮魚 2017-01-02 201
2 日販 2017-01-01 380

主キーを1列で表現するために複合主キーである[‘Stores’, ‘Dept’, ‘Date’]の値をアンダースコア(_)で結合して新しい列を作成する方法を調べました。

試しに下記コマンドを実行してみると、

dataframe['New_PK'] = dataframe['Stores'] + '_' + dataframe['Dept'] + '_' + dataframe['Date']

下記のようなエラーが発生します。

TypeError: ufunc 'add' did not contain a loop with signature matching types dtype('<U21') dtype('<U21') dtype('<U21')

調査した結果、下記のようなコマンドで列値の結合ができました。

dataframe['New_PK'] = dataframe[['Store', 'Dept', 'Date']].apply(lambda x: '{}_{}_{}'.format(x[0], x[1], x[2]), axis=1)
Stores Dept Date Value New_PK
1 青果 2017-01-01 151 1_青果_2017-01-01
1 鮮魚 2017-01-01 188 1_鮮魚_2017-01-01
1 青果 2017-01-02 153 1_青果_2017-01-02
1 日販 2017-01-02 284 1_日販_2017-01-02
1 鮮魚 2017-01-02 201 1_鮮魚_2017-01-02
2 日販 2017-01-01 380 2_日販_2017-01-01