当前位置: 首页 > 知识库问答 >
问题:

如何按多列筛选数据帧

上官凯泽
2023-03-14

若要用单个列过滤数据文件(DF),如果我们考虑有男性和女性的数据,我们可以:

males = df[df[Gender]=='Male']

问题1——但如果数据跨越多年,而我只想看到2014年的男性会怎样?

在其他语言中,我可能会这样做:

if A = "Male" and if B = "2014" then 

(除非我想这样做并在新的dataframe对象中获取原始dataframe的子集)

问题2。我如何在一个循环中实现这一点,并为每个独特的年份和性别集(即:2013年男性、2013年女性、2014年男性和2014年女性)创建一个数据框对象

for y in year:

for g in gender:

df = .....

共有3个答案

沃瑾瑜
2023-03-14

从熊猫0.13开始,这是最高效的方式。

df.query('Gender=="Male" & Year=="2014" ')
顾宏朗
2023-03-14

对于要用作筛选器且依赖于多个列的更通用的布尔函数,可以使用:

df = df[df[['col_1','col_2']].apply(lambda x: f(*x), axis=1)]

其中f是一个函数,应用于col_1和col_2的每对元素(x1,x2),并根据您想要的任何条件(x1,x2)返回True或False。

翁俊良
2023-03-14

使用

males = df[(df[Gender]=='Male') & (df[Year]==2014)]

要使用for循环将数据帧存储在dict中,请执行以下操作:

from collections import defaultdict
dic={}
for g in ['male', 'female']:
  dic[g]=defaultdict(dict)
  for y in [2013, 2014]:
    dic[g][y]=df[(df[Gender]==g) & (df[Year]==y)] #store the DataFrames to a dict of dict

一个演示为您的getDF

def getDF(dic, gender, year):
  return dic[gender][year]

print genDF(dic, 'male', 2014)

 类似资料:
  • 有一个数据帧: 以及熊猫系列: 如何创建包含c1在list1中的行的新数据帧。 输出:

  • 我想通过作为字符串的属性名筛选类的集合。假设我有一个名为Person的类,我有它的一个集合,或者是IEnumerable或者是List,我想过滤这个集合,但是我不知道确切的过滤器,我的意思是我不能使用: 让我举一个例子。

  • 我试图基于单个条件,根据多列中的值过滤数据帧,但保留我根本不想应用过滤器的其他列。 我回顾了这些答案,第三个是最接近的,但仍然没有运气: 如何按多列筛选数据帧 筛选多个列 Python熊猫-如何按一个值筛选多个列 设置: 电流输出: 期望输出: 我试过: 以及许多其他变体(,,

  • 我在Python中使用一个视频游戏的熊猫DataFrame,每个游戏都有一种类型。我正在尝试删除任何在DataFrame中出现次数少于一定次数的类型的视频游戏,但我不知道该怎么做。我确实发现了一个StackOverflow问题,这个问题似乎是相关的,但我根本无法破译这个解决方案(可能是因为我从未听说过R,而且我对函数编程的记忆充其量也很生疏)。 帮助?

  • 我想过滤熊猫DataFrame,它从DataFrame中过滤掉除值中声明的行之外的所有其他列。我如何才能做到这一点并获得预期输出。 预期输出:

  • 本文向大家介绍Python如何用filter函数筛选数据,包括了Python如何用filter函数筛选数据的使用技巧和注意事项,需要的朋友参考一下 一.filter函数简介 filter函数主要用来筛选数据,过滤掉不符合条件的元素,并返回一个迭代器对象,如果要转换为列表list或者元祖tuple,可以使用内置函数list() 或者内置函数tuple()来转换; filter函数接收两个参数,第一个