Если вы хотите установить столбец, который вы фильтруете в качестве нового индекса, вы также можете рассмотреть возможность использования .filter
; если вы хотите сохранить его как отдельный столбец, то str.contains
- это путь.
Допустим, у вас есть
df = pd.DataFrame({'vals': [1, 2, 3, 4, 5], 'ids': [u'aball', u'bball', u'cnut', u'fball', 'ballxyz']})
ids vals
0 aball 1
1 bball 2
2 cnut 3
3 fball 4
4 ballxyz 5
и ваш план, чтобы отфильтровать все строки, в которых ids
содержит ball
и установить ids
как новый индекс, вы можете сделать
df.set_index('ids').filter(like='ball', axis=0)
который дает
vals
ids
aball 1
bball 2
fball 4
ballxyz 5
Но filter
также позволяет вам пересылать регулярное выражение, поэтому вы также можете фильтровать только те строки, где конец столбца заканчивается ball
. В этом случае вы используете
df.set_index('ids').filter(regex='ball$', axis=0)
vals
ids
aball 1
bball 2
fball 4
Обратите внимание, что теперь запись с ballxyz
не входит, как это начинается с ball
и не заканчивается с ним.
Если вы хотите, чтобы получить все записи, которые начинаются с ball
вы можете просто использовать
df.set_index('ids').filter(regex='^ball', axis=0)
получая
vals
ids
ballxyz 5
Те же работы с колоннами; все, что вам нужно изменить, это часть axis=0
. Если вы фильтруете на основе столбцов, это будет axis=1
.
Вы должны принять один из 5 ответов, которые были опубликованы, отметка галочки под кнопками голосования, обратите внимание, что ответы 'str.contains', вероятно, являются самым быстрым и рекомендуемым методом для ваших требований: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.strings.StringMethods.contains.html#pandas.core.strings.StringMethods.contains – EdChum