【问题标题】:Column contains column 2列包含第 2 列
【发布时间】:2023-03-09 05:33:01
【问题描述】:

我有一个数据框。我想测试 (C) 在每一行上 (B) 列中的数字是否在字符串 (A) 列中。

df = pd.DataFrame({'A': ["me 123", "me-123", "1234", "me 12", "123 and"],
                   'B': [123,       123,      123,    123,     6]})

我想得到:

         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):

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):

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):

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):

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):

df['A1'] = df['A'] .apply(word_tokenize)

不将 - 识别为空格。请问如何才能得到顶部的结果?

【问题讨论】:

    标签: pandas


    【解决方案1】:

    来自extract的矢量化方式

    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】:

    re.findall

    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

    非常相似

    df.assign(C=df.A.str.findall(pat).str[0].eq(df.B.astype(str)).astype(int))
    

    【讨论】:

      猜你喜欢
      • 2016-04-15
      • 2019-09-22
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 2021-06-04
      • 2014-07-30
      • 1970-01-01
      相关资源
      最近更新 更多