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

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

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

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

pandas

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

Q&A

解決済

3回答

564閲覧

Dataframeの3列に対し条件を設定し、2つが真となる行の抽出

tomato100p

総合スコア1

Python

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

pandas

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

0グッド

0クリップ

投稿2020/05/31 09:07

ご指導のほどよろしくお願い申し上げます。
なんとかpythonでメタボリックシンドローム判定のコードを作成したいと四苦八苦しております。

血圧、血糖、血清脂質の値が格納されているDataframeのうち、2つ以上が基準値から外れている行を
抽出したいのですがうまくいきません。
loopで各値を判定し、基準値外をカウントすれば実現できそうですが、せっかくpythonを使用しているので
もっとスマートな書き方はできないものかと考えております。

やってみたことはbool型に変換し、trueの数をカウントしてみてはどうかと考えましたが上手くうごきませでした。

大変恐縮ではございますが、ご教示いただければ幸いです。
何卒よろしくお願い申し上げます。

python

1df_基準該当者 = df[((bool(df['血圧'] >= 130) + bool(df['血糖'] >= 110 ) + bool(df['脂質'] >= 150)) >= 2 ) 

試したこと

ここに問題に対して試したことを記載してください。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

meg_

2020/05/31 09:24

「pandas 抽出」で検索すれば色々情報は得られると思います。
tomato100p

2020/05/31 09:27

早速のご返信、誠にありがとうございます。 ご指摘いただいた内容で探してみます。 今後ともよろしくお願い申し上げます。
guest

回答3

0

もっときれいに出来るかもしれませんが、参考まで。

python

1df=pd.DataFrame([[100,110,130],[150,120,100],[100,100,120],[130,150,160]],columns=["血圧","血糖","脂質"]) 2print(df[pd.concat([df["血圧"]>=130, df["血糖"]>=110, df["脂質"]>=150],axis=1).sum(axis=1)>=2]) 3 4# 血圧 血糖 脂質 5# 1 150 120 100 6# 3 130 150 160

投稿2020/05/31 09:44

編集2020/05/31 09:57
x98000

総合スコア1096

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

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

tomato100p

2020/05/31 09:55

早速のご回答ありがとうございます。 貴重なお時間を頂戴しましたこと、重ねてお礼申し上げます。 大変綺麗なコードをご提示いただきまして、誠にありがとうございました。 初心者なため、理解できない部分もございますが参考にさせていただきます。 誠にありがとうございました。
x98000

2020/05/31 09:58

検証したので追記しておきました
tomato100p

2020/05/31 11:01

お世話になっております。 tomato100pです。 ご多忙中、検証までしていただき感激です。 全く知らない命令があり、大変刺激になりました。 本当にありがとうございます。 今後ともよろしくお願い申し上げます。
guest

0

pandasは初心者ですが、

trueの数をカウントしてみてはどうかと考えましたが上手くうごきませでした。

Python

1print(sum([True, True, False])) 2# 2 3print(sum([True, False, False])) 4# 1 5```参考にしてみては?

投稿2020/05/31 09:47

ForestSeo

総合スコア2722

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

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

tomato100p

2020/05/31 09:57

早速のご返信、誠にありがとうございました。 私も初心者のため、ご回答いただけるだけでも大変ありがたいです。 今後ともよろしくお願い申し上げます。
guest

0

ベストアンサー

自分だったら以下のような感じにします。

Python

1df =pd.DataFrame([[130,110,150,0],[10,40,200,0]], columns=['血圧','血糖','脂質','スコア'] ) 2df.loc[df['血圧'] >= 130,'Score'] = df['スコア'] + 1 3df.loc[df['血糖'] >= 110,'Score'] = df['スコア'] + 1 4df.loc[df['脂質'] >= 150,'Score'] = df['スコア'] + 1 5df_基準該当者 = df.loc[df['スコア']>=2]

個人を特定できるIDとかもDataFrameに含まれているものと思いますが、
データフレームの中身が見えないので間違ってたらすいません。

投稿2020/05/31 09:43

pea

総合スコア453

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

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

tomato100p

2020/05/31 09:49

早速のご返信、誠にありがとうございます。 ご教示いただきました内容でやりたいと思っていたことが実現できそうです。 ご丁寧にご回答いただいまして、誠にありがとうございました。 こちらに質問して本当によかったです。 今後とも何卒よろしくお願い申し上げます。
pea

2020/05/31 09:52

どういたしまして。 直接ここにタイピングしたので一部カラム名ミスってますが読み替えてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問