Найти значение, являющееся подмножеством строки в кадре данных Pandas

SLglider спросил: 11 июня 2018 в 11:01 в: python

Это одно из последующих решений / вопросов для одного из моих других вопросов: Python Pandas сравнивает два кадра данных, чтобы присвоить страну номер телефона

Мы имеют два кадра данных:

df1 = pd.DataFrame({"TEL": ["49123410", "49123411","49123412","49123413","49123414","49123710", "49123810"]})
df2 = pd.DataFrame({"BASE_NR": ["491234","491237","491238"],"NAME": ["A","B","C"]})

Что я хочу сделать, так это назначить имена df2 для TEL df1. Если мы берем первое значение "491234", мы видим, что первые пять записей списка в df1 начинаются именно в этой строке. Это должно привести к чему-то вроде этого:

|   | TEL      | PREFIX |
| 0 | 49123410 | 491234 |
| 1 | 49123411 | 491234 |
| 2 | 49123412 | 491234 |
| 3 | 49123413 | 491234 |
| 4 | 49123414 | 491234 |
| 5 | 49123710 | 491237 |
| 6 | 49123810 | 491238 |

Кроме Python Pandas сравнивает два блока данных для присвоения страны номеру телефона

p>

Я разработал еще один подход, который работает намного быстрее:

for i, s in df2.iterrows():
    df1.loc[df1["TEL"].str.startswith(s[0], na=False), "PREFIX"] = s[0]

До сих пор он работал отлично, и я использовал его снова и снова, поскольку мне нужно сопоставить много разных источников по номерам телефонов и их подмножествам. Но в последнее время я испытываю все больше и больше проблем. Столбец preFIX будет настроен, но останется пустым. Никаких совпадений больше не найдено, где раньше было около 150 000.

Есть ли что-то фундаментальное, что мне не хватает, и разве это просто удача? Входные файлы (я читаю их из csv), и типы данных не изменились. Я также не изменил версию Pandas (22).

PS: То, что также было бы полезно, это идея, как отладить ту часть, которая здесь происходит:

df1.loc[df1["TEL"].str.startswith(s[0], na=False), "PREFIX"] = s[0]

0 ответов