質問: df[df['商品名']].str.contains('ズボン')] ##df5,6,7...と続く ``` これだと発生している問題として書いた二点がネックとなり非効率だと感じています。 他に良い方法があれば教えていただけると助かります。 ### 補足情報(FW/ツールのバージョンなど) Windows10 Python 3.7 Pandas Jupyter notebook
回答: 1商品1グループならばグループと言う列を作って、そこにグループを追加していけば良いと思います。 ``` import pandas as pd # ダミーのデータフレームを作成 df = pd.DataFrame( {"商品名": ["長靴", "革靴", "傘", "カッパ", "皮の帽子", "しあわせのくつ", "シルクのハット"]} ) df["グループ名"] = "" print(df) # グループ辞書(これを編集) groups = { "靴": ["靴", "くつ", "クツ"], "帽子": ["帽子", "ぼうし", "ハット"], "服": ["服", "ふく"], } # 辞書に基づいてグループ名の列を埋める for group, words in groups.items(): mask = False for word in words: mask |= df["商品名"].str.contains(word) df.loc[mask, "グループ名"] = group print("\nグループを追加した例") print(df) # グループ化されていないもの mask = df["グループ名"] == "" print("\nグループ化されていないもの") print(df[mask]) ``` 結果 ``` 商品名 グループ名 0 長靴 1 革靴 2 傘 3 カッパ 4 皮の帽子 5 しあわせのくつ 6 シルクのハット グループを追加した例 商品名 グループ名 0 長靴 靴 1 革靴 靴 2 傘 3 カッパ 4 皮の帽子 帽子 5 しあわせのくつ 靴 6 シルクのハット 帽子 グループ化されていないもの 商品名 グループ名 2 傘 3 カッパ ```