enter image description here我有两个数据帧。 “邮政编码”列的每个值都包含区2、5或7中的邮政编码。我想在代码数据框中创建一个名为“区”的全新列,该列与该邮政编码所属的区相对应太。此for循环似乎无效。我试图将每个列都放入列表中,然后使用for循环,但这似乎不起作用,因为区号比实际的邮政编码多。最终显示ValueError:值的长度与索引的长度不匹配
这是代码。
d2 = d_codes['District 2'].tolist()
d5 = d_codes['District 5'].tolist()
d7 = d_codes['District 7'].tolist()
main_zips = codes['Zip Code'].tolist()
result = []
for value in main_zips:
if value in d2:
result.append("District 2")
elif value in d5:
result.append("District 5")
elif value in d7:
result.append("District 7")
codes [“ Result”] =结果
是否有更好的方法来执行此任务?
答案 0 :(得分:0)
开始时要注意一小点-最好向人们提供有关您的问题的完整示例。提供一些虚假数据将使人们更轻松地为您提供帮助。
我会尝试将您的地区划分为不同的结构-单个数据框,地区,并包含两列-邮政编码和地区。熊猫melt非常适合:
import pandas as pd
df = pd.read_csv("fake_data.csv")
print(df.head())
District 2 District 5 District 7
0 23081 20106 20106
1 23090 20106 20106
2 23185 20106 20106
districts = df.melt()
print(districts)
variable value
0 District 2 23081
1 District 2 23090
2 District 2 23185
3 District 5 20106
4 District 5 20106
5 District 5 20106
6 District 7 20106
7 District 7 20106
8 District 7 20106
然后您可以根据邮政编码列merge Working with Passwords, Secure Strings and Credentials in Windows PowerShell。
codes = codes.merge(districts, how="left", left_on="zipcode", right_on="zipcode")
x zipcode district
0 1 23081 District2
1 2 23090 District2
2 3 20106 District5
3 3 20106 District5
4 3 20106 District5
5 3 20106 District7
6 3 20106 District7
7 3 20106 District7
尽管有两个问题,您的屏幕快照显示了在多个区域中出现的相同邮政编码,并且您有重复的邮政编码。合并将找到所有匹配项,因此合并后您将获得其他行。您应该解决将相同的邮政编码放入多个区域的问题,然后应该对zipcode列进行重复数据删除,以确保每个邮政编码只有一个匹配的区域。完成后,进行合并。
如有任何问题,请随时与我联系!