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

熊猫使用多个字段一起过滤行

澹台承
2023-03-14
问题内容

我有这样的大熊猫DataFrame

In [34]: people = pandas.DataFrame({'name' : ['John', 'John', 'Mike', 'Sarah', 'Julie'], 'age' : [28, 18, 18, 2, 69]})
         people  = people[['name', 'age']]
         people

Out[34]:    
    name    age
0   John    28
1   John    18
2   Mike    18
3   Sarah   2
4   Julie   69

我想DataFrame使用以下元组对此进行过滤:

In [35]: filter = [('John', 28), ('Mike', 18)]

输出应如下所示:

Out[35]: 
    name    age
0   John    28
2   Mike    18

我尝试这样做:

In [34]: mask = k.isin({'name': ['John', 'Mike'], 'age': [28, 18]}).all(axis=1)
         k = k[mask]
         k

但是它向我展示了两个约翰,因为它独立地过滤了每一列(两个约翰的年龄都存在于age数组中)。

Out[34]: 
    name    age
0   John    28
1   John    18
2   Mike    18

如何根据多个字段合并过滤行?


问题答案:

这应该工作:

people.set_index(people.columns.tolist(), drop=False).loc[filter].reset_index(drop=True)

清理并带解释

# set_index with the columns you want to reference in tuples
cols = ['name', 'age']
people = people.set_index(cols, drop=False)
#                                   ^
#                                   |
#   ensure the cols stay in dataframe

#   does what you
#   want but now has
#   index that was
#   not there
# /--------------\
people.loc[filter].reset_index(drop=True)
#                 \---------------------/
#                  Gets rid of that index


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

  • 问题内容: 我需要使用字典来过滤数据帧,该字典的键是列名,值是我要过滤的值: 但是我想做些事情 但这会多次过滤数据帧,一次过滤一个值,而不是一次应用所有过滤器。有没有办法以编程方式进行? 编辑:一个例子: 给 但预期结果是 仅应选择最后一个。 问题答案: IIUC,您应该可以执行以下操作: 通过制作一个系列来与以下项目进行比较: 选择以下内容的相应部分: 查找它们匹配的位置: 查找它们 都 匹配的

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

  • 我有下表: 选择*结果JSON schema JSON: 我想通过cust_id和重复的字段来过滤它们的值,所以查询如下: 查询的预期输出: JSON格式查询的预期输出: 受这个问题的启发BigQuery:用标准SQL过滤重复字段我试试这个查询: 哪个输出: 输出JSON: 输出结果是不一样的,我想有,我如何才能实现这一点?

  • 问题内容: 我的数据有年龄,还有每月付款。 我正在尝试汇总付款总额,但不汇总年龄(平均有效)。 是否可以对不同的列使用不同的功能? 问题答案: 您可以将列名作为键,将想要的函数作为值传递给字典。

  • 我正在读一个带有如下浮点数的CSV: 并导入到数据框中,然后将此数据框写入新位置 现在,此