在Pandas数据帧中查找匹配字符串,从特定索引开始

2024-09-28 23:06:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas数据帧,其中5个匹配字符串,我们称它们为“xyz”,出现在初始匹配字符串之后的x行,我们称它们为“initial string1”和“initial 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”出现的行写入一个新的数据帧,然后根据它遇到的初始字符串写入excel。即将初始字符串1对应的所有xyz存储在一个数据帧中,并将与初始字符串2对应的所有xyz存储在另一个数据帧中。在

我不知道如何使用iterrorws和df[“column”]的组合。结构匹配(“匹配字符串”)来执行这些迭代。感谢你的帮助!在


Tags: 数据字符串pandasdfdataindexexcelinitial
3条回答

为什么不能只搜索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方法:

^{pr2}$

这样的事情怎么样:

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]

[出去]

^{pr2}$
# 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

enter image description here

相关问题 更多 >