Python 使用dataframe搜索字符串并返回假值

Python 使用dataframe搜索字符串并返回假值,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个这样的数据帧 Index A 0 1 cat 1 2 dog 2 3 bot 3 4 fly 我想根据A列是否包含字母“A、b或c”创建两列 预期结果: Index| A | yes | no | -------------------------- 1 |cat| cat | | 2 |dog| | dog | 3 |bot| bot | | 4

我有一个这样的数据帧

   Index    A
0      1  cat
1      2  dog
2      3  bot
3      4  fly
我想根据A列是否包含字母“A、b或c”创建两列

预期结果:

Index| A | yes |   no    |
--------------------------
1    |cat| cat |         |
2    |dog|     |   dog   | 
3    |bot| bot |         |
4    |fly|     |   fly   |
目前我有

abc = ['a', 'b', 'c']
abc = '|'.join(abc)

df['yes'] = df[df['A'].str.contains(abc)]['A']
df['no'] = df[df['A'].str.contains(abc) == False]['A']
选择“是”时效果良好,但如果选择“否”,则会出现以下错误

ValueError: too many values to unpack (expected 3)
列已创建,但由于该错误,未来函数(例如info())似乎会因此中断


这可能是因为对a、b和c的检查给出了3个结果。在这种情况下,有没有方法正确返回假值?谢谢

这看起来像是
设置索引
取消堆栈
的工作:

m = df['A'].str.contains(abc).replace({True: 'yes', False: 'no'})
m
 
0    yes
1     no
2    yes
3     no
Name: A, dtype: object

df.set_index(['Index', m])['A'].unstack(fill_value='')

A       no  yes
Index          
1           cat
2      dog     
3           bot
4      fly     

使用您的方法,代码中的微小更改可以获得正确的输出

abc = ['a', 'b', 'c']
abc = '|'.join(abc)

df['yes'] = df[df['A'].str.contains(abc)]['A']
df['no'] = df[~df['A'].str.contains(abc)]['A']
另一种方式

Chain
np.where
str.contains
'.join()
填充是和否。
pivot
框架如下所示

df['status']=np.where(df.A.str.contains('|'.join(['a','b','c'])),'yes','no')
    df.pivot(index='A', columns='status',values='A').fillna('').reset_index()

status    A   no  yes
0       bot       bot
1       cat       cat
2       dog  dog     
3       fly  fly