条件を満たす列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でリストごとの大小比較
コメント