質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

188閲覧

[python3.X] Pandasのデータフレームにおいて複数キーワードを使用しソートした上で1つの列に該当キーワードを追加していきたい

Chileno

総合スコア7

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2020/07/01 02:29

編集2020/07/01 12:41

前提・実現したいこと

質問の低評価をいただいて改めて質問した内容を見ると漠然としていましたので修正させていただきます。良い方法があればご共有いただけますと幸いです。

実現したいこと:
DataFrameにおいて、商品名の列があり、そのグループ分けをしたいと考えています。
そしてグループ名を新しい列に追加し、後どれくらいの商品名がグループ化されていないかを確認しながら作業がしたいです。

グループ名としてふさわしいと考えている名称はそれなりの数量の商品をカバーできるものだと考えます。
グループ名作成の一例としては商品名の列に「靴」といキーワードが入った商品名が複数種類ある場合、
それが長靴であれ、革靴であれ靴であることには変わらないため以下のように対象を絞りました。

python

1df1 = df[df['商品名']].str.contains('靴')] 2df1['グループ名'] = '靴'

最終的にconcat()を使用し全てのグループ化されたdfを繋げます。

発生している問題

・作業進捗が確認できない。
・キーワードの数だけdfを作成しないといけない。

試したこと

上記の方法を取ると以下のように複数のdfを作ることになりました。

python

1df1 = df[df['商品名']].str.contains('靴')] 2df2 = df[df['商品名']].str.contains('服')] 3df3 = df[df['商品名']].str.contains('帽子')] 4df4 = df[df['商品名']].str.contains('ズボン')] 5##df5,6,7...と続く

これだと発生している問題として書いた二点がネックとなり非効率だと感じています。
他に良い方法があれば教えていただけると助かります。

補足情報(FW/ツールのバージョンなど)

Windows10
Python 3.7
Pandas
Jupyter notebook

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

1商品1グループならばグループと言う列を作って、そこにグループを追加していけば良いと思います。

python

1import pandas as pd 2 3# ダミーのデータフレームを作成 4df = pd.DataFrame( 5 {"商品名": ["長靴", "革靴", "傘", "カッパ", "皮の帽子", "しあわせのくつ", "シルクのハット"]} 6) 7df["グループ名"] = "" 8print(df) 9 10 11# グループ辞書(これを編集) 12groups = { 13 "靴": ["靴", "くつ", "クツ"], 14 "帽子": ["帽子", "ぼうし", "ハット"], 15 "服": ["服", "ふく"], 16} 17 18# 辞書に基づいてグループ名の列を埋める 19for group, words in groups.items(): 20 mask = False 21 for word in words: 22 mask |= df["商品名"].str.contains(word) 23 df.loc[mask, "グループ名"] = group 24 25print("\nグループを追加した例") 26print(df) 27 28 29# グループ化されていないもの 30mask = df["グループ名"] == "" 31print("\nグループ化されていないもの") 32print(df[mask])

結果

terminal

1 商品名 グループ名 20 長靴 31 革靴 42 傘 53 カッパ 64 皮の帽子 75 しあわせのくつ 86 シルクのハット 9 10グループを追加した例 11 商品名 グループ名 120 長靴 靴 131 革靴 靴 142 傘 153 カッパ 164 皮の帽子 帽子 175 しあわせのくつ 靴 186 シルクのハット 帽子 19 20グループ化されていないもの 21 商品名 グループ名 222 傘 233 カッパ

投稿2020/07/01 13:29

yymmt

総合スコア1615

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Chileno

2020/07/01 14:19

なるほど!辞書を作ってfor文を回すという発想ができませんでした。こちらの方法であれば辞書を更新しながら進捗が確認できるのでとても助かります。ありがとうございます。
Chileno

2020/07/02 07:10

もし私と同じような質問を持っていて、私がyymmtさんからいただいた回答が使えると思った初学者の方には「何でbooleanを引数にとってlocで別の列の参照ができるのだろう」と思われた方がいらっしゃるのではないでしょうか。私がそうでした・・・。 いいリンクがあるので貼っておきます。 テラテイル内:https://teratail.com/questions/74040 KSwordOfHasteさんの回答欄にリンクがあります。 外部直リンク:https://hydrocul.github.io/wiki/numpy/ndarray-ref-boolean.html
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問