如何检查数据框是否包含某个元素?

时间:2018-09-22 08:04:52

标签: python pandas dataframe

我有一个名为df的DataFrame,我想知道df是否在每一行中都包含元素a

import pandas as pd
import numpy as np 
df=pd.DataFrame({'id':[1,2,3],'item1':['a','c','a'],
'item2':['b','d','e'],'item3':['c','e',np.nan]})

Input:

   id item1 item2 item3
0   1     a     b     c
1   2     c     d     e
2   3     a     e   NaN

在新列contain_a中,1代表列item1item2item3包含元素a的列。

Expected:

   id item1 item2 item3 contains_a
0   1     a     b     c         1
1   2     c     d     e         0
2   3     a     e   NaN         1

2 个答案:

答案 0 :(得分:2)

使用

In [578]: df['contains_a'] = df.filter(like='item').eq('a').any(1).astype(int)

In [579]: df
Out[579]:
   id item1 item2 item3  contains_a
0   1     a     b     c           1
1   2     c     d     e           0
2   3     a     e   NaN           1

答案 1 :(得分:1)

使用字符串访问器检查第1列(id)中除df.iloc[:, 1:]之外的每列,以查看其是否包含字母a,然后在各行中使用anyaxis=1)。将布尔结果转换为整数(1或0)。

>>> df.assign(contains_a=df.iloc[:, 1:].apply(lambda s: s.str.contains('a')).any(axis=1).astype(int))
   id item1 item2 item3  contains_a
0   1     a     b     c           1
1   2     c     d     e           0
2   3     a     e   NaN           1

对于多个目标也太笼统了:

targets = ['aa', 'a', 'b', 'c']
d = {'contains_{}'.format(target): 
         df.iloc[:, 1:].apply(lambda s: s.str.contains(target)).any(axis=1).astype(int)
     for target in targets}

>>> df.assign(**d)
   id item1 item2 item3  contains_a  contains_aa  contains_b  contains_c
0   1     a     b     c           1            0           1           1
1   2     c     d     e           0            0           0           1
2   3     a     e   NaN           1            0           0           0