首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >列包含第2列

列包含第2列
EN

Stack Overflow用户
提问于 2019-05-20 15:29:07
回答 2查看 23关注 0票数 0

我有一份数据。我想测试(C),在每一行中,(B)栏中的数字是否在字符串(A)中。

代码语言:javascript
运行
复制
df = pd.DataFrame({'A': ["me 123", "me-123", "1234", "me 12", "123 and"],
                   'B': [123,       123,      123,    123,     6]})

我想得到:

代码语言:javascript
运行
复制
         A    B  C
0   me 123  123  1
1   me-123  123  1
2     1234  123  0
3    me 12  123  0
4  123 and    6  0

各种方法几乎可以管理这一点(1):

代码语言:javascript
运行
复制
df['C'] = [str(y) in x for x , y in zip(df.A.str.split(' '),df.B)]

         A    B      C
0   me 123  123   True
1   me-123  123  False
2     1234  123  False
3    me 12  123  False
4  123 and    6  False

或(2):

代码语言:javascript
运行
复制
df['C'] = [str(y) in x for x , y in zip(df.A,df.B)]

         A    B      C
0   me 123  123   True
1   me-123  123   True
2     1234  123   True
3    me 12  123  False
4  123 and    6  False

或(3):

代码语言:javascript
运行
复制
df['C']=df.A.str.contains(r'\b(?:{})\b'.format('|'.join(df.B.astype(str)))).astype(int)

         A    B  C
0   me 123  123  1
1   me-123  123  1
2     1234  123  0
3    me 12  123  0
4  123 and    6  1

或(4):

代码语言:javascript
运行
复制
def fun (A,B):
    return str(B) in str(A)
f = np.vectorize(fun, otypes=[int])
df["C"] = f(df['A'], df['B'])

         A    B  C
0   me 123  123  1
1   me-123  123  1
2     1234  123  1
3    me 12  123  0
4  123 and    6  0

或(5):

代码语言:javascript
运行
复制
df['A1'] = df['A'] .apply(word_tokenize)

不认识-作为一个空间。我怎么才能在上面得到结果呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-20 15:40:27

一种基于extract的矢量化方法

代码语言:javascript
运行
复制
df.A.str.extract('(\d+)', expand=False).astype(int).eq(df.B,0).astype(int)
Out[347]: 
   0
0  1
1  1
2  0
3  0
4  0
票数 2
EN

Stack Overflow用户

发布于 2019-05-20 15:39:04

re.findall

代码语言:javascript
运行
复制
pat = re.compile('\d+')
df.assign(C=[1 if str(b) in re.findall(pat, a) else 0 for a, b in zip(df.A, df.B)])

         A    B  C
0   me 123  123  1
1   me-123  123  1
2     1234  123  0
3    me 12  123  0
4  123 and    6  0

pandas.Series.str.findall

非常相似

代码语言:javascript
运行
复制
df.assign(C=df.A.str.findall(pat).str[0].eq(df.B.astype(str)).astype(int))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56224014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档