繁体   English   中英

Pandas dataframe 搜索字符串并返回 False 值

[英]Pandas dataframe search for string and return False values

我有一个像这样的 dataframe

   Index    A
0      1  cat
1      2  dog
2      3  bot
3      4  fly

我想根据 A 列是否包含字母“a OR b OR 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 个结果。 在这种情况下,有没有办法正确返回 False 值? 谢谢

这看起来像是set_indexunstack的工作:

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     

使用您的方法,对代码稍作改动即可获得正确的 output。

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']

另一种方式;

np.wherestr.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  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM