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

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

新規登録して質問してみよう
ただいま回答率
85.43%
データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Python

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

pandas

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

Q&A

解決済

2回答

862閲覧

A&Bを同時に抽出する

UedaJiro

総合スコア1

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Python

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

pandas

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

0グッド

0クリップ

投稿2021/01/30 05:29

編集2021/01/30 05:49

前提・実現したいこと

pandasで、データフレームの"A"と"B"が含まれている行を抽出したい
###ここに質問の内容を詳しく書いてください。
データフレームの中から、特定の組み合わせが入っている行を抽出するプログラムを書きたいです。

(例) df
ID  age products
0 300 30.0 A,B
1 302 31.0 B
2 303 25.0 B,A
3 304 29.0 C,A
4 305 32.0 B,A

上記から、productsに、AとBを同時に持っている行を抽出したいです。
ID  age products
0 300 30.0 A,B
2 303 25.0 B,A
4 305 32.0 B,A

###試したこと
df.query('products="A,B"')
しかしこれだと、A,Bの組み合わせのデータしか検索できませんでした。

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

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

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

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

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

guest

回答2

0

productsとして'A,C,B,D'のように2個以上のものが入っている場合があるなら

python

1>>> import pandas as pd 2>>> df = pd.DataFrame({'ID':[300,302,303,304,305,306], 'age':[30.0,31.0,25.0,29.0,32.0,28.0], 'products': ['A,B','B','B,A','C,A','B,A','A,C,B,D']}) 3>>> df2 = df[df['products'].apply(lambda x: 'A' in x.split(',') and 'B' in x.split(','))] 4>>> print(df2) 5 ID age products 60 300 30.0 A,B 72 303 25.0 B,A 84 305 32.0 B,A 95 306 28.0 A,C,B,D

投稿2021/01/30 09:11

ppaul

総合スコア24666

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

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

UedaJiro

2021/01/30 14:11

初歩的な質問に、とても親切にご回答頂き本当にありがとうございました!
guest

0

ベストアンサー

product列の内容を集合に変換し、集合{'A','B'}と比較するとよいです。

Python

1import pandas as pd 2from io import StringIO 3 4s = """ID age products 5300 30.0 A,B 6302 31.0 B 7303 25.0 B,A 8304 29.0 C,A 9305 32.0 B,A""" 10df = pd.read_csv(StringIO(s), sep='\s+') 11 12ab = df['products'].apply(lambda x: set(x.split(',')) == set(('A','B'))) 13 14print(df[ab]) 15# ID age products 16#0 300 30.0 A,B 17#2 303 25.0 B,A 18#4 305 32.0 B,A

投稿2021/01/30 05:57

can110

総合スコア38328

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

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

UedaJiro

2021/01/30 14:10

丁寧にご回答して頂き本当にありがとうございました。 お蔭様で疑問を解決することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.43%

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

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

質問する

関連した質問