【发布时间】:2021-02-21 22:06:32
【问题描述】:
编辑:
如果 Keyword1 和 Keyword2 的出现次数不匹配,则提供的解决方案不起作用。我更新了下面的数据框和代码以反映类似的不匹配。
原帖:
我有一个字符串数据框,我正在尝试选择两个特定字符串值 [Keyword1 和 Keyword2] 之间的所有行。
我正在使用下面的代码:
import pandas as pd
import numpy as np
df=pd.DataFrame(['A', 'B', 'C1', 'D', 'A', 'B', 'C2','C3', 'D','C4', 'B', 'C5'])
df.columns = ['Col1']
Keyword1= 'B'
Keyword2= 'D'
#Filter and delete file mode deliveries
a=df.index[df['Col1'] == Keyword1].tolist()
b=df.index[df['Col1'] == Keyword2].tolist()
b=np.add(b, 1).tolist()
index=[]
for i in range(len(b)):
index_temp=np.arange(a[i],b[i]).tolist()
index=index+index_temp
df_keep= df[df.index.isin(index)]
df_del= df[~df.index.isin(index)]
虽然这可以工作,但我想知道是否有更有效的方法来执行相同的任务。
【问题讨论】:
-
不确定为什么第一行在
df_del中,因为它不在两个关键字之间。请看我的回答。 -
在您的新输出中,对我来说没有意义的值是:
1)第一项——它不在D和B之间。它是第一项,因此它不能位于两项之间。2)为什么输出倒数第二项B?我们在D和B之间输出,那么为什么会输出这个B? 3)同样,为什么最后一个项目C5输出了而其他没有?它是最后一项,而不是在两项之间。 -
将“B”视为起始字符串,将“D”视为结束字符串。属于此类别的项目是:B、C1、D、B、C2、C3、D。这些项目进入 df_keep,其余项目进入 df_del。
标签: python pandas string dataframe