根据其他列表中的值在数据框中创建一列

时间:2020-08-08 21:25:20

标签: python list dataframe

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”] =结果

是否有更好的方法来执行此任务?

1 个答案:

答案 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列进行重复数据删除,以确保每个邮政编码只有一个匹配的区域。完成后,进行合并。

如有任何问题,请随时与我联系!