Как удалить строки из фрейма данных после сравнения - PullRequest
2 голосов
/ 13 марта 2020

Я хочу отфильтровать мой фрейм данных, используйте часть filter с условием. И я не знаю, как это сделать

import numpy as np


table = pd.DataFrame({'movie': ['thg', 'thg', 'mol', 'mol', 'lob', 'lob'],
                  'rating': [3., 4., 5., np.nan, np.nan, np.nan],
                  'name': ['John', 'Paul', 'Adam', 'Graham', 'Eva', 'Thomas']})

filter = pd.DataFrame({'name': ['John', 'Paul','Adam', 'Graham', 'Eva', 'Thomas'],
                       'qty': [1, 1, 3, 10, 7, 5]})

>>> table 
  movie    name  rating
0   thg    John       3
1   thg    Paul       4
3   mol    Adam       5
4   mol  Graham     NaN
5   lob     Eva     NaN
6   lob  Thomas     NaN

Я знаю, что это не работает, но я не могу это изменить, помогите мне, пожалуйста

result=df[(df['name'] == filter[qty<3]) ]


>>> result 
  movie    name  rating
0   thg    John       3
1   thg    Paul       4

Ответы [ 4 ]

4 голосов
/ 13 марта 2020

Я считаю, что вам нужно:

table[table['name'].isin(filt.loc[filt['qty']<3,'name'])]

  movie  rating  name
0   thg     3.0  John
1   thg     4.0  Paul

Примечание: я изменил переменную filter на filt, так как filter является встроенной функцией, и вы не должны называть переменная с таким именем

2 голосов
/ 13 марта 2020

Используйте Series.isin с callable:

table[table['name'].isin(df_filter.loc[lambda x: x['qty']<3, 'name'])]


  movie  rating  name
0   thg     3.0  John
1   thg     4.0  Paul

или DataFrame.merge

table.merge(df_filter.loc[lambda x: x['qty'].lt(3), ['name']])
2 голосов
/ 13 марта 2020

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

result = table[table['name'].isin(filter[filter['qty']<3]['name'].values)]
0 голосов
/ 13 марта 2020

У меня есть более краткое решение, почему бы не использовать запрос:

df=table.merge(filter,on="name")
df.query("qty<3")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...