#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. вы правы, данные образца были неверными, я исправил это