Как уже указывалось, для этой задачи filter
не требуется.В ответе @ Александра используется loc
.В качестве альтернативы вы также можете использовать query
:
df1.query('PHASE == "F"')
landuse_SUB_ID TYPE RECD_DATE PHASE LAND_USE CPACTIONDA
3 34 1 2000-04-14 F REC 2000-04-14
4 34 1 2000-04-14 F SFD 2000-04-14
10 53 1 2000-02-22 F SFD 2000-02-22
filter
и у меня тоже отлично работает:
df1_filter1 = df1.set_index('PHASE')
df1_filter1.filter(like='F', axis=0)
landuse_SUB_ID TYPE RECD_DATE LAND_USE CPACTIONDA
PHASE
F 34 1 2000-04-14 REC 2000-04-14
F 34 1 2000-04-14 SFD 2000-04-14
F 53 1 2000-02-22 SFD 2000-02-22
По поводу вашего вопроса оиспользование regex
:
df2 = df1.set_index('LAND_USE')
df2.filter(regex="E$", axis=0)
landuse_SUB_ID TYPE RECD_DATE PHASE CPACTIONDA
LAND_USE
NONE 24 1 2000-04-07 P 2000-05-04
NONE 35 1 2000-01-20 P 2000-02-02
NONE 43 1 2000-09-07 P 2000-09-21
NONE 51 1 2000-11-10 P 2000-11-28
Здесь вы фильтруете все строки, заканчивающиеся на E
.
То же, что вы могли бы достичь, например, выполнив:
df1[df1['LAND_USE'].str.endswith('E')]
landuse_SUB_ID TYPE RECD_DATE PHASE LAND_USE CPACTIONDA
1 24 1 2000-04-07 P NONE 2000-05-04
5 35 1 2000-01-20 P NONE 2000-02-02
8 43 1 2000-09-07 P NONE 2000-09-21
9 51 1 2000-11-10 P NONE 2000-11-28
Проблема с filter
в том, что вы затем создаете индекс с неуникальными значениями, что обычно является плохой идеей.Итак, я бы пошел с .loc
или .query
.