2016-10-14 4 views
0

Я хочу отфильтровать dataframe. Попытка использовать стандартные логические (множественные) выражения, но это не сработает. Мой код:Отфильтровать dataframe

import pandas as pd 
import numpy as np 

# Setting a dataframe 
dates = pd.date_range('1/1/2000', periods=10) 

df1 = pd.DataFrame(np.random.randn(10, 4), index=dates, columns=['A', 'B', 'C', 'D']) 

# Filtering 
df1 = df1.loc[lambda df: -0.5 < df1.A < 0 and 0 <= df1.B <= 1, :] 

Любые мысли об этом?

ответ

2

Нет необходимости в анонимной функции лямбда. Просто фильтруйте с помощью логического оператора. Также обратите внимание на использование побитового оператора, &, а не логического оператора, and. Ниже приведены эквивалентные варианты фильтрации:

df1 = df1.query('(A > -0.5) & (A < 0) & (B >= 0) & (B <= 1)', engine='python')) 

df1 = df1.loc[(df1.A > -0.5) & (df1.A < 0) & (df1.B >= 0) & (df1.B <= 1)] 

df1 = df1[(df1.A > -0.5) & (df1.A < 0) & (df1.B >= 0) & (df1.B <= 1)] 

Рассмотрим даже с помощью pandas.Series.between:

df1 = df1.loc[(df1.A.between(-0.5, 0, inclusive=False) & (df1.B.between(0, 1))] 
+0

Я люблю .between! –

Смежные вопросы