根据熊猫中另一列的长度获取子字符串

时间:2018-12-12 16:11:20

标签: python pandas

我有一个数据框

       plan_identifier wellthie_issuer_identifier
0  UNM99901AL0000001-DEN                   UNM99902
1  UNM99902AK0000001-DEN                   UNM99902
2  UNM99904AZ0000001-DEN                   UNM99904
3  UNM99905AR0000001-DEN                   UNM99905
4  UNM99906CA0000001-DEN                   UNM99906
5  UNM99908CO0000001-DEN                   UNM99909
6  UNM99909CT0000001-DEN                   UNM99909

我需要检查在获取plan_identifier的长度之后考虑的wellthie_issuer_identifier的子字符串是否相等?

UNM99902的长度为8,所以我的plan_identifier子字符串= UNM99901。现在,这应该使我返回False。

所以,只要这不相等,我都应该得到False。

我的输出应该是:-

FALSE
TRUE
TRUE
TRUE
TRUE
FALSE
TRUE

我尝试了以下方法-

print(~(df['plan_identifier'].str[:(df['wellthie_issuer_identifier'].astype(str).str.len())] != df['wellthie_issuer_identifier']))

如何实现?我们可以使用apply()吗?

2 个答案:

答案 0 :(得分:2)

使用defchararray.find中的numpy

s1=df.plan_identifier.values.astype(str)
s2=df.wellthie_issuer_identifier.values.astype(str)    
~np.core.defchararray.find(s1,s2).astype(bool)
 Out[64]: array([False,  True,  True,  True,  True, False,  True])

答案 1 :(得分:1)

熊猫中的字符串方法通常非常慢。您可以改为使用列表推导。 IIUC:

>>> [i in p for p,i in zip(df['plan_identifier'],df['wellthie_issuer_identifier'])]
[False, True, True, True, True, False, True]

# or assign to new column:

df['new_column'] = [i in p for p,i in zip(df['plan_identifier'],df['wellthie_issuer_identifier'])]
>>> df
         plan_identifier wellthie_issuer_identifier  new_column
0  UNM99901AL0000001-DEN                   UNM99902       False
1  UNM99902AK0000001-DEN                   UNM99902        True
2  UNM99904AZ0000001-DEN                   UNM99904        True
3  UNM99905AR0000001-DEN                   UNM99905        True
4  UNM99906CA0000001-DEN                   UNM99906        True
5  UNM99908CO0000001-DEN                   UNM99909       False
6  UNM99909CT0000001-DEN                   UNM99909        True

[EDIT] 在一条评论中,您说您只对字符串的开头感兴趣。在这种情况下,您可以改用startswith

[p.startswith(i) for p,i in zip(df['plan_identifier'],df['wellthie_issuer_identifier'])]