Vic*_*nry 7 python dataset pandas
我有一个数据集,其中我试图确定每个人的风险因素的数量.所以我有以下数据:
Person_ID Age Smoker Diabetes
001 30 Y N
002 45 N N
003 27 N Y
004 18 Y Y
005 55 Y Y
Run Code Online (Sandbox Code Playgroud)
每个属性(年龄,吸烟者,糖尿病)都有自己的条件来确定它是否是一个风险因素.因此,如果年龄> = 45,那么这是一个风险因素.吸烟者和糖尿病患者如果是"Y"则是危险因素.我想要的是添加一个列,根据这些条件为每个人增加风险因素的数量.所以数据看起来像这样:
Person_ID Age Smoker Diabetes Risk_Factors
001 30 Y N 1
002 25 N N 0
003 27 N Y 1
004 18 Y Y 2
005 55 Y Y 3
Run Code Online (Sandbox Code Playgroud)
我有一个我在Excel中愚弄的样本数据集,我在那里的方式是使用COUNTIF公式,如下所示:
=COUNTIF(B2,">45") + COUNTIF(C2,"=Y") + COUNTIF(D2,"=Y")
但是,我将使用的实际数据集对于Excel来说太大了,所以我正在学习python的pandas.我希望我能提供一些我已经尝试过的例子,但坦率地说,我甚至不知道从哪里开始.我查看了这个问题,但它并没有真正解决如何使用来自多列的不同条件将其应用于整个新列.有什么建议?
如果你想坚持使用熊猫.你可以使用以下......
isY = lambda x:int(x=='Y')
countRiskFactors = lambda row: isY(row['Smoker']) + isY(row['Diabetes']) + int(row["Age"]>45)
df['Risk_Factors'] = df.apply(countRiskFactors,axis=1)
Run Code Online (Sandbox Code Playgroud)
这个怎么运作
isY - 是一个存储的lambda函数,它检查单元格的值是否为Y,否则返回1,否则为0 countRiskFactors - 将风险因子相加
最后一行使用apply方法,并将参数键设置为1,它将方法-first参数 - 沿着DataFrame行方向并返回一个附加到DataFrame的系列.
打印输出df
Person_ID Age Smoker Diabetes Risk_Factors
0 1 30 Y N 1
1 2 45 N N 0
2 3 27 N Y 1
3 4 18 Y Y 2
4 5 55 Y Y 3
Run Code Online (Sandbox Code Playgroud)
我会用以下方式做到这一点.
(请注意,如果您的吸烟者和糖尿病专栏已经是布尔(True/False)而不是字符串,这会更简单.)
它可能看起来像这样:
df = pd.DataFrame({'Age': [30,45,27,18,55],
'Smoker':['Y','N','N','Y','Y'],
'Diabetes': ['N','N','Y','Y','Y']})
Age Diabetes Smoker
0 30 N Y
1 45 N N
2 27 Y N
3 18 Y Y
4 55 Y Y
#Step 1
risk1 = df.Age > 45
risk2 = df.Smoker == "Y"
risk3 = df.Diabetes == "Y"
risk_df = pd.concat([risk1,risk2,risk3],axis=1)
Age Smoker Diabetes
0 False True False
1 False False False
2 False False True
3 False True True
4 True True True
df['Risk_Factors'] = risk_df.sum(axis=1)
Age Diabetes Smoker Risk_Factors
0 30 N Y 1
1 45 N N 0
2 27 Y N 1
3 18 Y Y 2
4 55 Y Y 3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17921 次 |
| 最近记录: |