Выберите строки панд, если элемент строки содержится в другом элементе строки - PullRequest
2 голосов
/ 30 сентября 2019

У меня есть pandas dataframe, который выглядит следующим образом:

real_value, prediction
'invalid', 'inv'
'invalid', 'neg'
'invalid', 'inv'
'negative', 'neg'
'negative', 'neg'
'negative', 'neg'
'positive', 'pos'
'positive', 'pos'
'positive', 'inv'

Я хотел бы выбрать все строки, в которых прогноз и реальное значение являются несовпадением, другими словами Я хотел быхотел бы получить фрейм данных, который выглядит как :

real_value, prediction
'invalid', 'neg'
'positive', 'inv'

Я пытался df.loc[~df.prediction.isin(df.real_value)], но это не работает. Его легко выбрать на основе значения SPECIFIC, USER DEFINED, например, df.loc[~df.prediction.isin(['neg'])], но я не могу найти способ выбора на основе значений, встречающихся в самих строках.

Как получить желаемоевыбор? Спасибо

Ответы [ 3 ]

2 голосов
/ 30 сентября 2019

Используйте следующее условие:

df[df['real_value'].str[:3].ne(df['prediction'])]

Выход:

    real_value  prediction
1   invalid     neg
8   positive    inv

ne Возвращает Не равно серии и прочее. Это поэлементно. Вы не можете использовать isin, потому что это требует итерации, Series, DataFrame или dict, поэтому вы не сравниваете столбцы real_value и prediction поэлементно.

1 голос
/ 30 сентября 2019

Вы также можете сделать это, используя столбец маски, который немного более гибок, если длина вашего прогноза не всегда одинакова (как и другие ответы):

df['mask'] = [x[1] in x[0] for x in zip(df['real_value'], df['prediction'])]
print(df.loc[df['mask'] == False].drop('mask', axis=1))

возвращает:

  real_value  prediction
1    invalid         neg  
8   positive         inv
1 голос
/ 30 сентября 2019

Надеюсь, это поможет.

Это тоже должно помочь. Pandas Flexible Wrappers

df.loc[(df.real_value != df.prediction.astype(str).str[:3])]

Это, вероятно, намного аккуратнее и основано на комментарии @WenYoBen:

df[df.Prediction.str[:3].ne(df.real_value)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...