Как проверить, содержится ли серия pandas в строках фрейма данных pandas

#python #pandas #dataframe #series

#python #pandas #фрейм данных #Серии

Вопрос:

У меня есть серия pandas, и я хочу проверить, точно ли она соответствует строке фрейма данных pandas

Пример ожидаемого поведения

s in df ==> True
где s = pd.Series({'a': 1, 'b': 2}) и df = pd.DataFrame({'a': [1,2,3], 'b': [2,1,3]})

s in df ==> False
где s = pd.Series({'a': 1, 'b': 2}) и df = pd.DataFrame({'a': [2,1,3], 'b': [1,3,4]})

Решение Я знаю, что это работает, но очень сложно читать

 not df[(df['a'] == s['a']) amp; (df['b'] == s['b'])].empty
 

Ответ №1:

Одна из идей — сравнить по DataFrame.eq , затем проверить, есть ли хотя бы одно совпадение по DataFrame.all , а затем проверить по Series.any :

Здесь добавляется DataFrame.reindex только для столбцов фильтра с помощью Series s :

 df = pd.DataFrame({'a': [1,2,3], 'b': [2,1,3], 'c': [4,5,48]})
print (df)
   a  b   c
0  1  2   4
1  2  1   5
2  3  3  48

s = pd.Series({'a': 1, 'b': 2})

print (df.reindex(s.index, axis=1))
   a  b
0  1  2
1  2  1
2  3  3

print (df.reindex(s.index, axis=1).eq(s))
       a      b
0   True   True
1  False  False
2  False  False

print (df.reindex(s.index, axis=1).eq(s).all(axis=1))
0     True
1    False
2    False
dtype: bool

print (df.reindex(s.index, axis=1).eq(s).all(axis=1).any())
True
 

Комментарии:

1. @user11696358 — Во-первых, это хорошие образцы данных? Как вы думаете? df = pd.DataFrame({'a': [1,2,3], 'b': [2,20,3]})

2. вы правы, данные образца были неверными, я исправил это