当前位置: 首页 > 面试题库 >

熊猫python COUNTIF在具有多个条件的多个列上

齐学文
2023-03-14
问题内容

我有一个数据集,其中我试图确定每个人的危险因素数量。所以我有以下数据:

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

每个属性(年龄,吸烟者,糖尿病)都有自己的条件来确定是否是危险因素。因此,如果年龄> = 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

我有一个样本数据集,我在Excel中鬼混,而我这样做的方式是使用COUNTIF公式,如下所示:

=COUNTIF(B2,">45") + COUNTIF(C2,"=Y") + COUNTIF(D2,"=Y")

但是,我将要使用的实际数据集对于Excel来说太大了,因此我正在为python学习熊猫。我希望我可以提供一些例子,但坦率地说,我什至不知道从哪里开始。我看着这个问题,但是它并没有真正解决如何使用来自多个列的不同条件将其应用于整个新列的方法。有什么建议?


问题答案:

如果您想坚持使用熊猫。您可以使用以下…

isY = lambda x:int(x=='Y')
countRiskFactors = html" target="_blank">lambda row: isY(row['Smoker']) + isY(row['Diabetes']) + int(row["Age"]>45)

df['Risk_Factors'] = df.apply(countRiskFactors,axis=1)

这个怎么运作

isY-是一个存储的lambda函数,用于检查单元格的值是否为Y,否则返回1 countRiskFactors-汇总风险因素

最后一行使用apply方法,将参数键设置为1,该方法沿DataFrame逐行应用方法-first参数-并返回附加到DataFrame的Series。

打印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


 类似资料:
  • 问题内容: 我正在尝试使用Pandas在几个条件下进行布尔索引。我原来的DataFrame称为。如果执行以下操作,将得到预期的结果: 但是,如果我这样做(我认为应该是等效的),则不会返回任何行: 知道导致差异的原因是什么? 问题答案: 使用是因为运算符优先级: 或者,在单独的行上创建条件: 样品 :

  • 问题内容: 我想根据以下条件创建一个带有数值的新列: 一种。 b。 C。所有其他组合, 我希望最终结果如下: 我该怎么做? 问题答案: 为此,可以使用做,条件使用位和用于和与周围的多个条件括号由于运算符优先级。因此,返回条件为true的地方,否则返回:

  • 我有一个单一的CSV文件,在其中我想重命名一些列相同的名称。我的初始代码如下所示 我用这段代码从dataframe中提取了选定的列 此切片每隔三列获取一次。现在我想用相同的名称重命名每三列一次,但这样重命名我的列会出错 有没有办法在pandas中重命名多个同名列? 除了手动操作,还有其他建议吗?

  • 问题内容: 我有一个pandas df,并希望按照以下原则(用SQL术语)完成一些工作: 现在,这适用于一个列/值对: 但是,我不确定如何将其扩展为多个列/值对。 为了清楚起见,每一列都匹配一个不同的值。 问题答案: 由于运算符的优先级,您需要将多个条件括在括号中,并使用按位运算符()和(或)和()。 如果使用或,则熊猫可能会抱怨这是模棱两可的。在那种情况下,我们是否要比较条件中一系列的每个值还不

  • 我尝试在数据帧“df_energy”中添加一个新的列“energy_class”,如果“consumpion_energy”值为 有什么办法可以帮我吗? 先谢谢你

  • 我想对两列使用不同的条件来聚合行。 当我做,我得到输出1 当我做时,我得到输出2 是否有一种方法可以进行聚合,将输出1显示到,将输出2显示到?