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 helperDataFrame
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