Pandas 使用部分字符串匹配从DF中删除行

Pandas 使用部分字符串匹配从DF中删除行,pandas,python-3.6,Pandas,Python 3.6,从以下df中,我想删除所有不以CBT_21或CBT_TY1开头的行: code date type strike settlement 0 CBT_06_F2016_S 2015-01-02 P 240.0 2.45 1 CBT_06_F2016_S 2015-01-02 P 360.0 48.60 2 CBT_21_F2016_S 2015-01-02 P 210.0

从以下df中,我想删除所有不以CBT_21或CBT_TY1开头的行:

               code        date type  strike  settlement
0    CBT_06_F2016_S  2015-01-02    P   240.0        2.45
1    CBT_06_F2016_S  2015-01-02    P   360.0       48.60
2    CBT_21_F2016_S  2015-01-02    P   210.0        0.80
3    CBT_TY1_F2016_S 2015-01-02    P   320.0       23.20
4    CBT_06_F2016_S  2015-01-02    C   430.0        3.70
期望输出:

               code        date type  strike  settlement
0    CBT_21_F2016_S  2015-01-02    P   210.0        0.80
1    CBT_TY1_F2016_S 2015-01-02    P   320.0       23.20
请问什么是最有效的pythonic方法?我有一个非常大的文件要处理。

您可以使用with和chain by
(按位
)或使用with
^
来选择字符串的开头:

m = df['code'].str.startswith('CBT_21') | df['code'].str.startswith('CBT_TY1')
df = df[m]
print (df)
              code        date type  strike  settlement
2   CBT_21_F2016_S  2015-01-02    P   210.0         0.8
3  CBT_TY1_F2016_S  2015-01-02    P   320.0        23.2
另一个解决方案:

m = df['code'].str.contains('^CBT_21|^CBT_TY1')
df = df[m]
print (df)
              code        date type  strike  settlement
2   CBT_21_F2016_S  2015-01-02    P   210.0         0.8
3  CBT_TY1_F2016_S  2015-01-02    P   320.0        23.2