为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

素胚勾勒不出你 2021-09-14 21:18:50
我有一个数据框,       plan_identifier wellthie_issuer_identifier0  UNM99901AL0000001-DEN                   UNM999021  UNM99902AK0000001-DEN                   UNM999022  UNM99904AZ0000001-DEN                   UNM999043  UNM99905AR0000001-DEN                   UNM999054  UNM99906CA0000001-DEN                   UNM999065  UNM99908CO0000001-DEN                   UNM999096  UNM99909CT0000001-DEN                   UNM99909我需要检查plan_identifier得到长度后考虑的子串wellthie_issuer_identifier是否相等?Ex-length ofUNM99902是 8 ,所以我的plan_identifier子串 = UNM99901。现在这应该返回给我 False。所以,只要这不相等,我就应该得到 False。我的输出应该是:-FALSETRUETRUETRUETRUEFALSETRUE我试过类似下面的东西-print(~(df['plan_identifier'].str[:(df['wellthie_issuer_identifier'].astype(str).str.len())] != df['wellthie_issuer_identifier']))如何实现这一目标?我们可以使用apply()吗?
查看完整描述

2 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

使用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])


查看完整回答
反对 回复 2021-09-14
?
互换的青春

TA贡献1797条经验 获得超6个赞

Pandas 中的字符串方法通常很慢。您可以改用列表理解。IUC:


>>> [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

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


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


查看完整回答
反对 回复 2021-09-14
  • 2 回答
  • 0 关注
  • 237 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信