Nếu bạn muốn đặt cột bạn lọc làm chỉ mục mới, bạn cũng có thể xem xét sử dụng .filter
; nếu bạn muốn giữ nó như một cột riêng biệt thì str.contains
là cách để đi.
Hãy nói rằng bạn có
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
và kế hoạch của bạn là để lọc tất cả các hàng trong đó ids
chứa ball
VÀ thiết ids
như chỉ số mới, bạn có thể làm
df.set_index('ids').filter(like='ball', axis=0)
mang đến cho
vals
ids
aball 1
bball 2
fball 4
ballxyz 5
Nhưng filter
cũng cho phép bạn vượt qua một regex, vì vậy bạn cũng có thể lọc chỉ những hàng mà mục nhập cột kết thúc bằng ball
. Trong trường hợp này bạn sử dụng
df.set_index('ids').filter(regex='ball$', axis=0)
vals
ids
aball 1
bball 2
fball 4
Lưu ý rằng tại mục với ballxyz
không được bao gồm khi nó bắt đầu với ball
và không kết thúc với nó.
Nếu bạn muốn để có được tất cả các mục bắt đầu bằng ball
bạn có thể sử dụng đơn giản
df.set_index('ids').filter(regex='^ball', axis=0)
năng suất
vals
ids
ballxyz 5
Các công trình cùng với các cột; tất cả những gì bạn cần thay đổi là phần axis=0
. Nếu bạn lọc dựa trên các cột, nó sẽ là axis=1
.
Bạn nên chấp nhận một trong 5 câu trả lời đã được đăng, sẽ có dấu chọn bên dưới nút biểu quyết, lưu ý rằng câu trả lời 'str.contains' có lẽ là phương pháp nhanh nhất và được đề xuất cho các yêu cầu của bạn: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.strings.StringMethods.contains.html#pandas.core.strings.StringMethods.contains – EdChum