2017-02-02 2 views
0

Имеет ли панды аналог функции фильтра dplyr's()? В основном я хотел бы иметь возможность удалять строки на основе предиката.Как удалить строки из pandas DataFrame с помощью цепочки методов?

Я могу, конечно, сделать df = df[condition], но это не так хорошо, как метод цепочки.

+0

панд имеет [ 'filter'] (http://pandas.pydata.org /pandas-docs/stable/generated/pandas.DataFrame.filter.html#pandas.DataFrame.filter), но это берет последовательность меток, обычно используется предикат для создания маски и прохождения этого – EdChum

ответ

0

использование query

Рассмотрим dataframe df

df = pd.DataFrame(
    np.random.randint(-5, 6, (10, 10)), 
    columns=list('ABCDEFGHIJ')) 

df 

    A B C D E F G H I J 
0 0 4 -1 1 -3 -1 -4 -5 -1 2 
1 -4 2 -1 0 5 -1 1 -3 1 4 
2 3 -2 3 -2 -4 5 1 1 0 -2 
3 1 4 -5 4 -3 -3 -3 -3 -4 4 
4 -3 4 4 5 -2 -3 -1 3 3 -1 
5 0 0 -1 -1 2 2 5 -4 -1 -1 
6 -2 1 2 0 -1 -1 1 0 4 -4 
7 5 2 5 2 3 2 3 -3 1 1 
8 -2 -5 1 4 0 -1 4 4 -5 3 
9 -3 -2 -5 0 -5 -2 -2 2 0 -1 

Вы можете легко операции трубопровода в зависимости от условий фильтрации

df.query('A < 0') 

    A B C D E F G H I J 
1 -4 2 -1 0 5 -1 1 -3 1 4 
4 -3 4 4 5 -2 -3 -1 3 3 -1 
6 -2 1 2 0 -1 -1 1 0 4 -4 
8 -2 -5 1 4 0 -1 4 4 -5 3 
9 -3 -2 -5 0 -5 -2 -2 2 0 -1 

Вы можете включать в себя несколько условий

df.query('A < 0 & B < -1') 

    A B C D E F G H I J 
8 -2 -5 1 4 0 -1 4 4 -5 3 
9 -3 -2 -5 0 -5 -2 -2 2 0 -1 

Вы можете сделать много интересных вещей

df.query('-3 < A < 3 & H * J > 0') 

    A B C D E F G H I J 
5 0 0 -1 -1 2 2 5 -4 -1 -1 
8 -2 -5 1 4 0 -1 4 4 -5 3 

И все это получает возвращается как dataframe для включения следующей операции

+0

, это работает с предикаты на нечисловых столбцах? – daj

+0

Да, если вы предоставите образцы данных и что вы хотите с ними делать. Мы можем показать вам, как это сделать. – piRSquared

+0

Что делать, если я хочу передать более сложную функцию, или я не хочу кодировать такую ​​строку? Есть ли другой вариант? – mdeland

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