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

使用字典中的值过滤熊猫数据框

伊铭
2023-03-14
问题内容

我需要使用字典来过滤数据帧,该字典的键是列名,值是我要过滤的值:

filter_v = {'A':1, 'B':0, 'C':'This is right'}
# this would be the normal approach
df[(df['A'] == 1) & (df['B'] ==0)& (df['C'] == 'This is right')]

但是我想做些事情

for column, value in filter_v.items():
    df[df[column] == value]

但这会多次过滤数据帧,一次过滤一个值,而不是一次应用所有过滤器。有没有办法以编程方式进行?

编辑:一个例子:

df1 = pd.DataFrame({'A':[1,0,1,1, np.nan], 'B':[1,1,1,0,1], 'C':['right','right','wrong','right', 'right'],'D':[1,2,2,3,4]})
filter_v = {'A':1, 'B':0, 'C':'right'}
df1.loc[df1[filter_v.keys()].isin(filter_v.values()).all(axis=1), :]

    A   B   C   D
0   1   1   right   1
1   0   1   right   2
3   1   0   right   3

但预期结果是

    A   B   C   D
3   1   0   right   3

仅应选择最后一个。


问题答案:

IIUC,您应该可以执行以下操作:

>>> df1.loc[(df1[list(filter_v)] == pd.Series(filter_v)).all(axis=1)]
   A  B      C  D
3  1  0  right  3

通过制作一个系列来与以下项目进行比较:

>>> pd.Series(filter_v)
A        1
B        0
C    right
dtype: object

选择以下内容的相应部分df1

>>> df1[list(filter_v)]
    A      C  B
0   1  right  1
1   0  right  1
2   1  wrong  1
3   1  right  0
4 NaN  right  1

查找它们匹配的位置:

>>> df1[list(filter_v)] == pd.Series(filter_v)
       A      B      C
0   True  False   True
1  False  False   True
2   True  False  False
3   True   True   True
4  False  False   True

查找它们 匹配的位置:

>>> (df1[list(filter_v)] == pd.Series(filter_v)).all(axis=1)
0    False
1    False
2    False
3     True
4    False
dtype: bool

最后使用它索引到df1:

>>> df1.loc[(df1[list(filter_v)] == pd.Series(filter_v)).all(axis=1)]
   A  B      C  D
3  1  0  right  3


 类似资料:
  • 拿着字典: 我如何把这个字典变成一个数据框,其中的值是列?即。我想要一个数据框显示: 这种形式似乎根本得不到! 谢谢 这是一个不同的问题,另一个问题只是问如何将字典的值放入数据帧,我问的是如何获得我概述的特定形式

  • 问题内容: 我有很多行的python pandas数据框。从这些行中,我想切出并且仅使用“ body”列中包含单词“ ball”的行。为此,我可以这样做: 问题是,我希望它不区分大小写,这意味着如果出现Ball或bAll一词,我也希望它们。进行不区分大小写的搜索的一种方法是将字符串转换为小写,然后以这种方式搜索。我想知道如何去做。我试过了 但这是行不通的。我不确定是否应该在此等性质上使用lambd

  • 问题内容: 我有一个数据框 ,它有一 列。我想创建两个新的数据框。一个包含 年份等于的所有行 ,另一个数据框包含 年份不等于的所有行 。我知道您可以这样做,`df.ix[‘2000-1-1’ ‘2001-1-1’]`但是为了获得2000年中没有的所有行,需要创建2个额外的数据帧,然后进行串联/联接。 有这样的办法吗? 这段代码不起作用,但是有什么类似的方法吗? 问题答案: 您可以使用datetim

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

  • 问题内容: 如何通过字典替换熊猫系列中的值已被询问并多次提出。 推荐的方法是要么使用,有时也使用如果所有的系列值是在字典键找到。 但是,使用性能的速度通常不合理,通常比简单的列表理解速度慢倍。 替代方法具有良好的性能,但是仅当在字典中找到所有键时才建议使用。 为什么这么慢,如何提高性能? 注意:此问题未标记为重复问题,因为它正在寻找有关在给定不同数据集的情况下何时使用不同方法的具体建议。这在答案中

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