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

熊猫:过滤多个条件

柳仲卿
2023-03-14
问题内容

我正在尝试使用Pandas在几个条件下进行布尔索引。我原来的DataFrame称为df。如果执行以下操作,将得到预期的结果:

temp = df[df["bin"] == 3]
temp = temp[(~temp["Def"])]
temp = temp[temp["days since"] > 7]
temp.head()

但是,如果我这样做(我认为应该是等效的),则不会返回任何行:

temp2 = df[df["bin"] == 3]
temp2 = temp2[~temp2["Def"] & temp2["days since"] > 7]
temp2.head()

知道导致差异的原因是什么?


问题答案:

使用()是因为运算符优先级:

temp2 = df[~df["Def"] & (df["days since"] > 7) & (df["bin"] == 3)]

或者,在单独的行上创建条件:

cond1 = df["bin"] == 3    
cond2 = df["days since"] > 7
cond3 = ~df["Def"]

temp2 = df[cond1 & cond2 & cond3]

样品

df = pd.DataFrame({'Def':[True] *2 + [False]*4,
                   'days since':[7,8,9,14,2,13],
                   'bin':[1,3,5,3,3,3]})

print (df)
     Def  bin  days since
0   True    1           7
1   True    3           8
2  False    5           9
3  False    3          14
4  False    3           2
5  False    3          13


temp2 = df[~df["Def"] & (df["days since"] > 7) & (df["bin"] == 3)]
print (temp2)
     Def  bin  days since
3  False    3          14
5  False    3          13


 类似资料:
  • 问题内容: 我有这样的大熊猫: 我想使用以下元组对此进行过滤: 输出应如下所示: 我尝试这样做: 但是它向我展示了两个约翰,因为它独立地过滤了每一列(两个约翰的年龄都存在于数组中)。 如何根据多个字段合并过滤行? 问题答案: 这应该工作: 清理并带解释

  • 问题内容: 要按单列过滤数据帧(df),如果我们考虑男性和女性的数据,则可以: 问题1-但是,如果数据跨越多年并且我只想看2014年的男性,该怎么办? 用其他语言,我可能会做类似的事情: (除了我要执行此操作,并在新的数据框对象中获取原始数据框的子集) 问题2。如何循环执行此操作,并为每个唯一的年份和性别集创建一个数据框对象(例如,2013-男,2013-女,2014-男和2014-女的df 问题

  • 问题内容: 我有一个数据集,其中我试图确定每个人的危险因素数量。所以我有以下数据: 每个属性(年龄,吸烟者,糖尿病)都有自己的条件来确定是否是危险因素。因此,如果年龄> = 45,则是一个危险因素。吸烟者和糖尿病为“ Y”是危险因素。我想要添加一列,以根据这些条件总计每个人的风险因素数量。因此数据如下所示: 我有一个样本数据集,我在Excel中鬼混,而我这样做的方式是使用COUNTIF公式,如下所

  • 我试图开发以下过滤器与熊猫数据帧: 我有四列,,,和 如何将其作为聚合函数编写? 下面是一个编写效率低下的工作示例: 输出:

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

  • 我有一个数据帧 是否有某种自定义筛选方法,可以让Python知道 说我要过滤,