在数据帧中查找条件连续值

2024-09-27 22:16:38 发布

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

我有一个多行多列填充类型和值的数据框架。都是字符串。我想编写一个函数,该函数满足以下条件: 1) 哪种类型的搜索(第1列) 2) 第一个值(第2列) 3) 第二个连续值(在第2列的下一行中)

我设法编写了一个函数来搜索一种类型的一个值,如下所示,但如何添加第二种类型?我想可能是借助于df.shift(axis=0),但我不知道如何将该命令与条件搜索相结合

import pandas as pd

d = {'type': ['wordclass', 'wordclass', 'wordclass', 'wordclass', 'wordclass', 'wordclass',
 'english', 'english', 'english', 'english', 'english', 'english'],
 'values': ['dem', 'noun', 'cop', 'det', 'dem', 'noun', 'this', 'tree', 'is', 'a', 'good', 'tree']}
df = pd.DataFrame(data=d)
print(df)

tiername = 'wordclass'
v1 = 'dem'
v2 = 'noun'

def search_single_tier(tiername, v1):
    searchoutput = df[df['type'].str.contains(tiername) & df['values'].str.match(v1)]
    return searchoutput

x = search_single_tier(tiername, v1)
print(x)```


Tags: 函数tree类型dfenglishtype条件pd
1条回答
网友
1楼 · 发布于 2024-09-27 22:16:38

您不需要为此创建函数。相反,请尝试以下方法:

In [422]: tiername = 'wordclass'                                                                                                                                                                            

## This equates `type` columns to `tiername`. 
## `.iloc[0:2]` gets the first 2 rows for the matched condition

In [423]: df[df.type.eq(tiername)].iloc[0:2]                                                                                                                                                                
Out[423]: 
        type values
0  wordclass    dem
1  wordclass   noun

在Op的评论之后:

Find all consecutive rows like this:
tiername = 'wordclass'
v1 = 'dem'

In [455]: ix_list = df[df.type.eq(tiername) & df['values'].eq(v1)].index.tolist()

In [464]: pd.concat([df.iloc[ix_list[0]: ix_list[0]+2], df.iloc[ix_list[1]: ix_list[1]+2]])                                                                                                                 
Out[464]: 
        type values
0  wordclass    dem
1  wordclass   noun
4  wordclass    dem
5  wordclass   noun

相关问题 更多 >

    热门问题