filas fila eliminar borrar python pandas dataframe sql-function

python - fila - Cómo implementar ''in'' y ''not in'' para el marco de datos de Pandas



eliminar filas dataframe python (5)

Por lo general, he estado filtrando genéricos en filas como esta:

criterion = lambda row: row[''countries''] not in countries not_in = df[df.apply(criterion, axis=1)]

¿Cómo puedo lograr los equivalentes de SQL IN y NOT IN ?

Tengo una lista con los valores requeridos. Aquí está el escenario:

df = pd.DataFrame({''countries'':[''US'',''UK'',''Germany'',''China'']}) countries = [''UK'',''China''] # pseudo-code: df[df[''countries''] not in countries]

Mi forma actual de hacer esto es la siguiente:

df = pd.DataFrame({''countries'':[''US'',''UK'',''Germany'',''China'']}) countries = pd.DataFrame({''countries'':[''UK'',''China''], ''matched'':True}) # IN df.merge(countries,how=''inner'',on=''countries'') # NOT IN not_in = df.merge(countries,how=''left'',on=''countries'') not_in = not_in[pd.isnull(not_in[''matched''])]

Pero esto parece un horrible kludge. ¿Alguien puede mejorarlo?


Puede usar pd.Series.isin .

Para el uso "IN": something.isin(somewhere)

O para "NO ENCENDIDO": ~something.isin(somewhere)

Como un ejemplo trabajado:

>>> df countries 0 US 1 UK 2 Germany 3 China >>> countries [''UK'', ''China''] >>> df.countries.isin(countries) 0 False 1 True 2 False 3 True Name: countries, dtype: bool >>> df[df.countries.isin(countries)] countries 1 UK 3 China >>> df[~df.countries.isin(countries)] countries 0 US 2 Germany


Quería filtrar las filas de dfbc que tenían un BUSINESS_ID que también estaba en BUSINESS_ID de dfProfilesBusIds

Finalmente lo hice funcionar:

dfbc = dfbc[(dfbc[''BUSINESS_ID''].isin(dfProfilesBusIds[''BUSINESS_ID'']) == False)]


Solución alternativa que usa el método .query() :

In [5]: df.query("countries in @countries") Out[5]: countries 1 UK 3 China In [6]: df.query("countries not in @countries") Out[6]: countries 0 US 2 Germany


df = pd.DataFrame({''countries'':[''US'',''UK'',''Germany'',''China'']}) countries = [''UK'',''China'']

implementar en :

df[df.countries.isin(countries)]

implementar no en como en los países de descanso:

df[df.countries.isin([x for x in np.unique(df.countries) if x not in countries])]