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

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

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

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

Q&A

解決済

1回答

1923閲覧

python pandas 2つ以上の文字列を含む列名の列の抽出

shougi

総合スコア15

Python 3.x

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

0グッド

0クリップ

投稿2018/11/18 05:29

pandasの配列において,列名(columns)に2つ以上の共通する文字列を含む列の抽出を行いたいです.

python

1import pandas as pd 2import numpy as np 3 4a = pd.DataFrame(np.arange(16).reshape(4,4), columns=['f-a1', 'f-a2', 'f-b1', 'r-b1']) 5b = a.loc[:, a.columns.str.contains('1')] 6c = b.loc[:, b.columns.str.contains('f')] 7

以上のコードでcに列名にfと1の両方が含まれる列の要素を抽出できますが,これを1度にもしくは簡単に行う方法はないでしょうか.

以上,よろしくお願いします.

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

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

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

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

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

guest

回答1

0

ベストアンサー

containsはデフォルトで正規表現を取るので、正規表現を使って書けば良いです。

問題は正規表現でandを取る方法ですが、r'(?=.*f)(?=.*1)'というパターンでとりあえず実現できます(効率が良い方法は他にあると思います)。

python

1>>> import pandas as pd 2>>> import numpy as np 3>>> a = pd.DataFrame(np.arange(16).reshape(4,4), columns=['f-a1', 'f-a2', 'f-b1', 'r-b1']) 4>>> a 5 f-a1 f-a2 f-b1 r-b1 60 0 1 2 3 71 4 5 6 7 82 8 9 10 11 93 12 13 14 15 10>>> a.loc[:,a.columns.str.contains(r'(?=.*f)(?=.*1)')] 11 f-a1 f-b1 120 0 2 131 4 6 142 8 10 153 12 14

別解

素直に2回containsしてandする。

python

1>>> a.loc[:,a.columns.str.contains('f') & a.columns.str.contains('1')] 2 f-a1 f-b1 30 0 2 41 4 6 52 8 10 63 12 14

投稿2018/11/18 05:39

hayataka2049

総合スコア30933

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

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

shougi

2018/11/18 05:42

わかりやすくありがとうございます.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問