[python]データフレームの中から条件を満たす列のIDを取得

person pointing numeric print python
Photo by Vitaly Vlasov on Pexels.com

条件を満たす列IDの取得

例えば

import pandas as pd
import numpy as np
dt = pd.DataFrame({"ID":np.arange(5), "基礎疾患":["喘息、高血圧", "nan", "白血病", "高血圧", "糖尿病、HT"]})

   ID    基礎疾患
0   0  喘息、高血圧
1   1     nan
2   2     白血病
3   3     高血圧
4   4     糖尿病、HT

のようになっているとする。この時、「高血圧」患者のIDを取得したい時があると思うが、以下のようにする。

まず、”nan”を”なし”に変える。

dt["基礎疾患"].replace("nan", "なし", inplace = True)

   ID    基礎疾患
0   0  喘息、高血圧
1   1      なし
2   2     白血病
3   3     高血圧
4   4     糖尿病、HT

pythonのisin()はデータフレームの中に数値があるかどうかを判定するが、str.contains()は文字列でも可能。

dt_hypertension = dt_temp["ID"].where(dt_temp["基礎疾患"].str.contains("高血圧|HTN|HT")).dropna()

下のようにorを用いると後半の”HT”を拾えず、うまく行かない。

dt_hypertension = dt["ID"].where(dt["基礎疾患"].str.contains("高血圧" or "HTN" or "HT")).dropna()

こうしておいて、リストに開けば良い。

print([int(i)for i in list(dt_hypertension)], end = "")
[0, 3, 4]

関連リンク

データフレームのwide-long変換
long型データフレームの取り扱い
データフレームの中から条件を満たす列のIDを取得
numpyでリストごとの大小比較

コメント

タイトルとURLをコピーしました