Python 如何按多列集筛选数据帧?

Python 如何按多列集筛选数据帧?,python,pandas,dataframe,Python,Pandas,Dataframe,有没有一种方法可以通过比较多个列和一组元组来过滤大型数据帧,其中元组中的每个元素对应于不同的列值? 例如,是否有一个.isin()方法将数据帧的多列与一组元组进行比较 例如: df = pd.DataFrame({ 'a': [1, 1, 1], 'b': [2, 2, 0], 'c': [3, 3, 3], 'd': ['not', 'relevant', 'column'], }) # Filter the DataFrame by checking if

有没有一种方法可以通过比较多个列和一组元组来过滤大型数据帧,其中元组中的每个元素对应于不同的列值? 例如,是否有一个
.isin()
方法将数据帧的多列与一组元组进行比较

例如:

df = pd.DataFrame({
    'a': [1, 1, 1],
    'b': [2, 2, 0],
    'c': [3, 3, 3],
    'd': ['not', 'relevant', 'column'],
})

# Filter the DataFrame by checking if the values in columns [a, b, c] match any tuple in value_set
value_set = set([(1,2,3), (1, 1, 1)])

new_df = ??  # should contain just the first two rows of df
您可以使用,但首先必须通过前3列创建元组:

print (df[df[['a','b','c']].apply(tuple, axis=1).isin(value_set)])
或将列转换为索引并使用:

另一个想法是使用by helper
DataFrame
by相同的3列名称的内部联接,然后
on
参数应该省略,因为通过两个df的列名称的交点联接:

print (df.merge(pd.DataFrame(value_set, columns=['a','b','c'])))
   a  b  c         d
0  1  2  3       not
1  1  2  3  relevant
print (df.merge(pd.DataFrame(value_set, columns=['a','b','c'])))
   a  b  c         d
0  1  2  3       not
1  1  2  3  relevant