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

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

新規登録して質問してみよう
ただいま回答率
85.47%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python

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

Q&A

解決済

2回答

807閲覧

特定のラベルの値のみ出力

anpapa

総合スコア16

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python

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

0グッド

0クリップ

投稿2018/06/15 08:57

ある多次元配列があり、特定の値のみを抽出し新しい配列を作りたいと考えています。

やりたいこと

以下のような配列から、

a b c d 1 [ -0.8, -0.4, 0.3, 8. ], 2 [ -0.1, 0.8, -0.4, 5. ], 3 [ 0.8, -0.1, 0.4 , 15. ], 4 [ 0.7, 0.5, -0.3, 3. ], 5 [ -0.6, 0.6, 0.3, 11. ], 6 [ 0.0, 0.1, -0.9, 1. ]

dの要素に8もしくは1の値を持つ行を抽出し、以下のような配列を作りたいです。

a b c d 1 [ -0.8, -0.4, 0.3, 8. ], 2 [ 0.0, 0.1, -0.9, 1. ]

if文を用いてループしようと考えておりましたが、その場合、ラベルの数だけループを回す必要があり、無駄を感じたため、何か他に良い方法がないか知りたいため、質問させていただきました。

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

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

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

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

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

guest

回答2

0

ベストアンサー

準備。

Python

1import pandas as pd 2import numpy as np 3 4df = pd.DataFrame( 5np.array([[ -0.8, -0.4, 0.3, 8. ], 6[ -0.1, 0.8, -0.4, 5. ], 7[ 0.8, -0.1, 0.4 , 15. ], 8[ 0.7, 0.5, -0.3, 3. ], 9[ -0.6, 0.6, 0.3, 11. ], 10[ 0.0, 0.1, -0.9, 1. ], 11]), columns=list('abcd'))

データフレームはboolの配列で選択できます。

Python

1>>> df[[True, False, False, False, False, True]] 2 a b c d 30 -0.8 -0.4 0.3 8.0 45 0.0 0.1 -0.9 1.0

データフレームは列名で列を取り出せます。

Python

1>>> df.d 20 8.0 31 5.0 42 15.0 53 3.0 64 11.0 75 1.0 8Name: d, dtype: float64

データフレームは比較演算子でboolの配列が取り出せます。

Python

1>>> df.d == 8.0 20 True 31 False 42 False 53 False 64 False 75 False 8Name: d, dtype: bool

boolのデータフレームは | で論理和ができます。結合の優先度の関係で(?)括弧が必要です。

Python

1>>> (df.d == 8.0) | (df.d == 1.0) 20 True 31 False 42 False 53 False 64 False 75 True 8Name: d, dtype: bool

以上から、必要な操作はこうなります。

Python

1>>> df[(df.d == 8.0) | (df.d == 1.0)] 2 a b c d 30 -0.8 -0.4 0.3 8.0 45 0.0 0.1 -0.9 1.0

投稿2018/06/15 11:58

quickquip

総合スコア11051

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

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

anpapa

2018/06/15 12:53

回答していただきありがとうございます。 お二人とも、論理和を用いて解決できるということを示してくださったのですが、より詳しく段階に分けて説明していただけたので、こちらの回答をベストアンサーにさせていただきます。 ありがとうございました。
guest

0

numpy使えば以下のようにできます。
もっとスマートな書き方もあるはずですが(思い出せない)。

Python

1import numpy as np 2 3a = np.array([ 4 [ -0.8, -0.4, 0.3, 8.], 5 [ -0.1, 0.8, -0.4, 5.], 6 [ 0.8, -0.1, 0.4 , 15.], 7 [ 0.7, 0.5, -0.3, 3.], 8 [ -0.6, 0.6, 0.3, 11.], 9 [ 0.0, 0.1, -0.9, 1.] 10 ]) 11print(a) 12 13b = a[(a[:,3] == 1) | (a[:,3] == 8)] # 3列目が1または8 14print(b) 15""" 16[[-0.8 -0.4 0.3 8. ] 17 [ 0. 0.1 -0.9 1. ]] 18"""

投稿2018/06/15 09:12

can110

総合スコア38266

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問