простой инструмент для фильтрации столбцов с конкретными условиями с помощью панд - PullRequest
0 голосов
/ 31 августа 2018

Мне интересно, существует ли в Python инструмент для фильтрации данных между столбцами, которые соответствуют определенным условиям. Мне нужно сгенерировать чистый фрейм данных, в котором все данные в столбце «A» должны иметь одинаковый последовательный номер в столбце «E» (и этот номер повторяется не менее двух раз). Вот пример:

df
Out[30]: 
         A         B           C          D           E
6        1       2.366       8.621      10.835        1
7        1       2.489       8.586      10.890        2
8        1       2.279       8.460      10.945        2
9        1       2.296       8.559      11.000        2
10       2       2.275       8.620      11.055        2
11       2       2.539       8.528      11.110        2
50       2      3.346       5.979      10.175         5
51       3       3.359       5.910      10.230        1
52       3       3.416       5.936      10.285        1 

Вывод будет:

df
Out[31]: 
         A         B           C          D           E
7        1       2.489       8.586      10.890        2
8        1       2.279       8.460      10.945        2
9        1       2.296       8.559      11.000        2
10       2       2.275       8.620      11.055        2
11       2       2.539       8.528      11.110        2
51       3       3.359       5.910      10.230        1
52       3       3.416       5.936      10.285        1 

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Вы должны быть в состоянии сделать что-то вроде следующего:

mask = (df['E'] == df['E'].shift(1)) | (df['E'] == df['E'].shift(-1))
filtered_df = df[mask]
0 голосов
/ 31 августа 2018

То, что вы ищете:

import numpy as np

df.groupby((df.E != df.E.shift(1)).cumsum()).filter(lambda x: np.size(x.E) >= 2)
# or
df[df.groupby((df.E != df.E.shift(1)).cumsum()).E.transform('size') >= 2]

Выход:

    A      B      C       D  E
7   1  2.489  8.586  10.890  2
8   1  2.279  8.460  10.945  2
9   1  2.296  8.559  11.000  2
10  2  2.275  8.620  11.055  2
11  2  2.539  8.528  11.110  2
51  3  3.359  5.910  10.230  1
52  3  3.416  5.936  10.285  1

Пояснение:

Вы хотите хранить все записи там, где есть последовательная группа в E, размер которой больше 2.

Первая часть (df.E != df.E.shift(1)).cumsum() позволяет помечать последовательные группы в столбце E, а затем группировать по этой метке и фильтровать DataFrame, сохраняя только группы, размер которых равен 2 или более.

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