Это аскутное последующее решение / вопрос к одному из моих других вопросов: 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 сравнивает два кадра данных, чтобы назначить страну для номера телефона
Я разработал другой подход, который работает намного быстрее:
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]