我有一个熊猫数据框,其中的行和列充满了类型和值。都是字符串。我想写一个条件如下的函数: 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)```
答案 0 :(得分:1)
您无需为此创建函数。相反,请尝试以下操作:
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
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