2017-07-26 45 views
1

從以下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方式嗎?我有一個非常大的文件要處理。

回答

1

您可以通過|(位or)使用boolean indexingstartswith和鏈或使用str.contains^字符串的選擇開始:

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