這個問題在這里已經有了答案: 檢查 Pandas DataFrame 列中的字串是否在字串串列中 4 個答案 22 小時前關閉。
我有一個資料框,其中包含一個年齡列和一個包含健康狀況串列的列。我想創建一個新列,根據一個人的年齡和健康狀況指示他們是否屬于“高風險”。因此,任何超過 40 歲或患有特定串列中的至少一種疾病(即肥胖、糖尿病、高血壓)的人都會在新的“高風險”欄中選擇“是”。
我使用下面的代碼過濾年齡
df['High risk'] = np.where(df['Age'] >= 40, 'Yes', 'No')
但是,我不知道如何搜索健康狀況列來過濾其他條件。最終,我希望我的資料框看起來像這樣:
Age Health Conditions High risk
0 45 anemia, hypertension Yes
1 26 diabetes, obesity Yes
2 38 anemia No
3 56 arthritis, asthma Yes
uj5u.com熱心網友回復:
np.where接受三個引數。第一個是邏輯陣列。您可以嘗試str.contains在列上Health Condition添加邏輯陳述句Age。我想出如下:
import pandas as pd
import numpy as np
df = pd.DataFrame({"Age":[45,26,38,56], "Health Conditions":["anemia, hypertension", "diabetes, obesity", "anemia", "arthritis, asthma"]})
mask = (df["Age"] > 40) | (df["Health Conditions"].str.contains("obesity|diabetes|hypertension"))
df["High risk"] = np.where(mask, "Yes", "No")
df
輸出
| 年齡 | 健康狀況 | 高風險 | |
|---|---|---|---|
| 0 | 45 | 貧血、高血壓 | 是的 |
| 1 | 26 | 糖尿病、肥胖 | 是的 |
| 2 | 38 | 貧血 | 不 |
| 3 | 56 | 關節炎,哮喘 | 是的 |
解釋
str.contains接受一個正則運算式模式的引數。obesity|diabetes|hypertension指示輸入字串是否是上述三種疾病之一。如果您有興趣在此條件下添加更多疾病,只需遵循此正則運算式中使用的模式即可。(“|”表示 OR)。
uj5u.com熱心網友回復:
這個怎么樣,假設高風險超過 40 歲或患有貧血癥:
import pandas as pd
data = [[45, 'anemia'], [30, 'anemia'], [30, 'arthritis']]
df = pd.DataFrame(data, columns = ['Age', 'Conditions'])
def HighRisk(row):
if row['Age'] >= 40:
HR = True
if 'anemia' in row['Conditions']:
HR = True
else:
HR = False
return HR #Returns HR = True if high risk, False if not
df['High risk'] = df.apply(HighRisk, axis = 1)
print(df)
給出輸出:
Age Conditions High risk
0 45 anemia True
1 30 anemia True
2 30 arthritis False
HighRisk您可以根據您對某人高風險的定義來調整該功能。
uj5u.com熱心網友回復:
我會為這樣的事情使用布爾運算。
hr_conditions = ["obesity", "diabetes", "hypertension"]
case1 = df["Age"] > 40
case2 = df["Conditions"].apply(lambda x: any([c in x for c in hr_conditions))
df["HighRisk"] = case1 & case2
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/426281.html
