[英]Making a column in a dataframe based of values in other lists
在此处输入图像描述我有两个数据框。 “邮政编码”列的每个值都包含一个 Zip 代码,该代码位于第 2,5 区或第 7 区。我想在代码 dataframe 中创建一个名为“区”的全新列,该列对应于 ZADCDBD2ZD79A82D84175CADCDBD2ZD79A82D84175也。 这个 for 循环似乎不起作用。 我试图将这些列中的每一个列成一个列表,然后使用 for 循环,但这似乎不起作用,因为区域代码比实际的 Zip 代码多。 它最终说 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")
代码[“结果”] = 结果
有没有更好的方法来执行此任务?
一个小提示开始 - 最好给人们一个关于你的问题的完整工作示例。 提供一些虚假数据将使人们更容易帮助您。
我会尝试让您的地区进入不同的结构 - 单个 dataframe,地区,有两列 - 邮政编码和地区。 Pandas 熔体非常适合:
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
然后,您可以根据 zipcode 列合并您的数据框。
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
但是有几个问题,您的屏幕截图显示多个地区出现相同的邮政编码,而且您有重复的邮政编码。 合并将找到所有匹配项,因此您将在合并后得到额外的行。 您应该解决将相同邮政编码放在多个地区的问题,然后您应该对邮政编码列进行重复数据删除,以确保每个邮政编码只有一个匹配的地区。 完成后,进行合并。
如果您有任何问题,请随时联系我!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.