In [51]: np.isin(df, ['pear','apple'])
Out[51]:
array([[ True, False, True],
[ True, True, True],
[False, True, True],
[ True, True, True]])
# ANY match along each row
In [52]: np.isin(df, ['pear','apple']).any(axis=1)
Out[52]: array([ True, True, True, True])
# Select corresponding rows with masking
In [56]: df[np.isin(df, ['pear','apple']).any(axis=1)]
Out[56]:
A B C
1 apple banana pear
2 pear pear apple
3 banana pear pear
4 apple apple pear
2。搜索ALL匹配项
这是我们的开始df:
In [42]: df
Out[42]:
A B C
1 apple banana pear
2 pear pear apple
3 banana pear pear
4 apple apple pear
In [67]: np.equal.outer(df.to_numpy(copy=False), ['pear','apple']).any(axis=1).all(axis=1)
Out[67]: array([ True, True, False, True])
最后,选择行:
In [70]: df[np.equal.outer(df.to_numpy(copy=False), ['pear','apple']).any(axis=1).all(axis=1)]
Out[70]:
A B C
1 apple banana pear
2 pear pear apple
4 apple apple pear
In [59]:
df[df == 'banana'].dropna(how='all')
Out[59]:
A B C
1 NaN banana NaN
3 banana NaN NaN
要测试多个值,可以使用多个遮罩:
In [90]:
banana = df[(df=='banana')].dropna(how='all')
banana
Out[90]:
A B C
1 NaN banana NaN
3 banana NaN NaN
In [91]:
apple = df[(df=='apple')].dropna(how='all')
apple
Out[91]:
A B C
1 apple NaN NaN
2 NaN NaN apple
4 apple apple NaN
您可以使用index.intersection仅为常用索引值编制索引:
In [93]:
df.loc[apple.index.intersection(banana.index)]
Out[93]:
A B C
1 apple banana pear
导言
在选择行的核心,我们需要一个1D掩码或一系列长度与
df
长度相同的布尔元素,我们称之为mask
。因此,最后使用df[mask]
,我们将在boolean-indexing之后的df
中获得所选行这是我们的开始
df
:I.匹配一个字符串
现在,如果我们只需要匹配一个字符串,它是向前的,元素相等:
如果我们需要在每行中查找
ANY
一个匹配项,请使用.any
方法:要选择相应的行,请执行以下操作:
二,。匹配多个字符串
1。搜索
ANY
匹配项这是我们的开始
df
:NumPy的^{} 将在这里工作(或者使用其他帖子中列出的pandas.isin)从^{中的搜索字符串列表中获取所有匹配项。所以,假设我们在{}中寻找{}或{}:
2。搜索
ALL
匹配项这是我们的开始
df
:因此,现在我们正在寻找具有
BOTH
的行,比如['pear','apple']
。我们将利用NumPy-broadcasting
:因此,我们有一个
2
项的搜索列表,因此我们有一个带有number of rows = len(df)
和number of cols = number of search items
的2D掩码。因此,在上面的结果中,第一个col表示'pear'
,第二个col表示'apple'
为了使事情具体化,让我们为三个项目
['apple','banana', 'pear']
设置一个掩码:此掩码的列分别用于
'apple','banana', 'pear'
回到
2
搜索项目案例,我们之前有:因为,我们在每行中查找
ALL
个匹配项:最后,选择行:
您可以通过将整个df与字符串进行比较来创建一个布尔掩码,并调用
dropna
passing paramhow='all'
删除字符串未出现在所有列中的行:要测试多个值,可以使用多个遮罩:
您可以使用
index.intersection
仅为常用索引值编制索引:对于单个搜索值
或
对于多个搜索词:
或
来自Divakar:返回带有两个的行
相关问题 更多 >
编程相关推荐