Получение подстроки на основе длины другого столбца в пандах - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть фрейм данных,

       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, равной или нет?

Ex-длина 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 голосов
/ 12 декабря 2018

Использование 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])
0 голосов
/ 12 декабря 2018

Строковые методы в пандах обычно очень медленные.Вместо этого вы можете использовать понимание списка.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'])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...