我有一个pandas数据框,其中有5个匹配的字符串,可以将它们称为“ xyz”,它出现在初始匹配字符串之后的x行中,可以将它们称为“ intial string1”和“ intial string2”
index col0 col3
500 data " initial string1"
.. .. ..
600 data "xyz"
... ... ...
1343 data "intial string1"
.. .. ..
1443 data "xyz"
... ... ...
2432 data "intial string2"
.. .. ..
2453 data "xyz"
.. .. ..
2467 data "intial string2"
.. .. ..
2487 data "xyz"
我希望能够从这些索引处开始遍历数据框,以查找首次出现的“ xyz”,并将这些“ xyz”出现的行写入新的数据框,然后基于该行进行优化遇到的初始字符串。 IE将与初始字符串1对应的所有xyz存储在一个数据帧中,并将与初始string2对应的所有xyz存储在另一个数据帧中。
我不确定如何使用iterrorws和df [“ column”]。str.match(“匹配字符串”)的组合来执行这些迭代。感谢帮助!
答案 0 :(得分:0)
您为什么不只搜索xyz
字符串?
df = pd.DataFrame({"col1": ['data', 'data', 'data', 'data', 'data', 'data', 'data'],
'col3': ['initial string', 'something', 'xyz',
'initial string', 'xyz', 'nothing', 'xyz']})
df[df.col3.str.match('xyz')].index
如果您有多个不同的字符串,只需使用.isin
方法:
df[df.col3.isin(['something', 'xyz'])].index
答案 1 :(得分:0)
那这样的事情呢?
indices_initial = [500, 1343, 2432, 5433, 7533]
indices_xyz = []
for i, j in zip(indices[:], indices[1:]):
indices_xyz.append(df.loc[i:j, 'col3'].eq('xyz').idxmax())
df.loc[indices_xyz]
[出]
col0 col3
index
600 data xyz
1443 data xyz
2453 data xyz
答案 2 :(得分:0)
# Setting up input data
df = pd.DataFrame(np.random.rand(12500,2), columns=['col0','col1'])
for i in [0, 500, 1343, 2432, 5433, 7533]:
df.loc[i,'col1']='init string'
for i in range(1,12000,100):
df.loc[i,'col1']='xyz'
# Hopefully solution to your question
search_results=pd.DataFrame()
for init_index, next_init_index in zip(df[df.col1=='init string'].index, df[df.col1=='init string'][1::].index):
search_results = search_results.append(df.query('index>'+str(init_index)+
' & index<'+str(next_init_index)+
' & col1=="xyz"').head(1))
search_results
答案 3 :(得分:0)
我能够通过使用itertools的下一个功能来搜索并分解出感兴趣的字符串的第一个匹配项,并将列表拼接到我要搜索字符串的区域中,从而解决了这个问题。