Настройка
У меня есть 2 кадра данных панд:
df_ads
: в каждой строке указана информация об одном объявлении о соскабливании жилья, а df_ads['ad_post_code']
содержит почтовый индекс объявления на голландском языке.
df_mapping
: сопоставление почтовых индексов и NUTS3 регионов
Мне нужно сопоставить почтовый индекс каждого объявления с его регионом NUTS3.
Dataframes
df_ads['ad_post_code']
выглядит,
0 1567 JA
1 3893 GB
2 5091 BE
3 1087 MB
4 7905 GW
5 5121 ZH
, где len(df_ads['ad_post_code']) = 85447
.
df_mapping
выглядит,
CODE NUTS_3
0 1011 NL326
1 1012 NL326
2 1013 NL326
3 1014 NL326
4 1015 NL326
5 1016 NL326
, где len(df_mapping) = 4074
, df_mapping['CODE']
отображают первые 4 символа почтового индекса Нидерландов, а df_mapping['NUTS_3']
- регион NUTS3 почтового кода.
Другими словами, почтовый индекс 1011
находится в регионе NUTS3 NL326
.
Проблема
Я сделал несколько простых циклов, чтобы отобразить рекламу в df_ads
в регионах NUTS3. Тем не менее, я, кажется, не в состоянии написать правильную настройку зацикливания.
nuts3_map = []
# insert postal codes into list
for i in range(0,len(df_ads)):
postal_code_ad = df_ads['ad_post_code'].iloc[i].split()[0]
for j in range(0,len(df_mapping)):
postal_code_map = str(df_mapping['CODE'].iloc[j])
# check if postal code match
if postal_code_ad == postal_code_map:
nuts3_map.append(df_mapping['NUTS_3'].iloc[j])
break
continue
Запуск этого дает len(nuts3_map) = 85353
в то время как len(df_ads) = 85448
, так что df_ads['nuts3'] = nuts3
дает ValueError: Length of values does not match length of index
.
Является ли double for loop самым быстрым способом сделать это? Если да, то как мне исправить цикл for таким образом, чтобы он работал хорошо?