设置
我有2个数据帧:
df_ads
:每一行包含一个废弃房屋广告的信息,df_ads['ad_post_code']
包含广告的荷兰邮政编码。你知道吗df_mapping
:邮政编码和NUTS3地区之间的映射我需要把每个广告的邮政编码映射到它的地区。你知道吗
数据帧
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
属于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
。你知道吗
双for循环是最快的方法吗?如果是这样,如何修复for循环以使其正常工作?你知道吗
我首先在
df_ads
中创建另一列:然后我将使用^{} 执行两个数据帧的内部合并:
我冒昧地修改了您的数据以产生一个可行的示例:
输出:
如果
df_ads['CODE']
中的每一个代码都存在于df_mapping['CODE']
中,那么您应该得到正确的输出。你知道吗编辑
如果您想知道
df_mapping
中的列表是否完整,可以执行以下操作:测向_广告地址[np.U不(df_ads['CODE'].isin(df_mapping['CODE'])]
缺少数据:
相关问题 更多 >
编程相关推荐