前提・実現したいこと
Windows10でPython3.XにてPandasを使用しています。またJupiter notebookを使用してコーディングしています。
以下AとBの2種類のexcelデータを使用しています。
A. キーワードリスト:①名寄せしたお店の名前、②キーワード(商品)、③グループ名
B. 突合先:①名寄せされていないお店の名前、②販売している商品、(③グループ名)
Bの突合先にある①と②にAの①と②が含まれている場合、Aの③グループ名をBの②の右にAppendしていきたいです。
いずれも含まれていない場合、「不明」という文字をグループ名の代わりに割り当てたいと考えています。
【キーワードリストイメージ】
店名(名寄せ) 商品キーワード グループ名
|八百屋 |ぶどう |果物|
|八百屋 |セロリ |野菜|
|魚屋 |さんま |青魚|
|魚屋 |キハダ |マグロ|
|魚屋 |めかぶ |海藻|
・
・
・
【突合先最終イメージ】
店名 商品 グループ名(追加したい列)
|八百屋〇〇店|ぶどう三十個 |果物|
|魚屋駅前店 |新鮮なさんま |青魚|
|魚屋駅前北口|美味しいわかめ|不明|
・
・
・
実装中に以下のエラーメッセージが発生しました。アドバイスいただけますと幸いです。
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-71-70dbd114baf3> in <module> 5 category_list.append('不明') 6 for j in range(len(tdata_k)): ----> 7 if tdata_s[j] in df_s2[i] & tdata_k[j] in df_d[i]: 8 category_list[i] = tdata_c[j] TypeError: unsupported operand type(s) for &: 'str' and 'str'
該当のソースコード
Python
1#df_d : B.突合先の②販売している商品 2#df_s2 : B.突合先の①お店の名前 3#tdata_k : A.キーワードリストの②キーワード名 4#tdata_s : A.キーワードリストの①名寄せされたお店の名前 5#tdata_c : A.キーワードリストの③グループ名 6 7df_d = df3['商品名'].values.tolist()#上述B突合先の②にあたる。リストにしてから処理。 8df_s2 = df3['店名'].values.tolist()#上述B突合先の①にあたる。リストにしてから処理。 9category_list = []#上述Bの(③グループ名にあたる)。先に空のリストを作成。 10for i in range(len(df_d)):#for文の範囲は上述B突合先。 11 category_list.append('不明')#最初に不明を代入しておく。 12 for j in range(len(tdata_k)):#for文の範囲は上述Aキーワードリスト。 13 if tdata_s[j] in df_s2[i] & tdata_k[j] in df_d[I]:#キーワードリストのにそれぞれが該当した場合以下の処理。 14 category_list[i] = tdata_c[j]#不明と代入されているはずの場所にグループ名を代入。突合できなければそのまま。 15
試したこと
不明とするのをbreakなどを駆使して最後に行おうとしたのですがうまくいかず。
また、if文を「&」ではなく「and」で繋いでもうまくいかず。
最終的にこの形になりました。
補足情報(FW/ツールのバージョンなど)
Python 3.7
Pandas
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/26 11:40
2020/06/26 11:43
2020/06/27 02:04
2020/06/28 12:28
2020/06/28 12:36
2020/06/28 12:53