从以下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方法是什么?我有一个非常大的文件要处理。
答案 0 :(得分:1)
您可以将boolean indexing
与startswith
一起使用,并使用|
(按位or
)或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