我正在尝试将一列从一个数据帧添加到另一个数据帧
df.head()
street_map2[["PRE_DIR","ST_NAME","ST_TYPE","STREET_ID"]].head()
PRE_DIR
只是街道名称的前缀。我想做的是将相关街道的列STREET_ID
添加到df
。我试过几种方法,但我对熊猫和琴弦的比较缺乏经验
street_map2['STREET'] = df["STREET"]
street_map2['STREET'] = np.where(street_map2['STREET'] == street_map2["ST_NAME"])
上面的代码显示“ValueError:值的长度与索引的长度不匹配”。我也尝试过使用street_map2['STREET'].str in street_map2["ST_NAME"].str
。有人能想出一个好办法吗?(请注意,它不需要100%准确,只需获得最大值,它可以与上面尝试的方法完全不同)
编辑感谢所有尝试过的人,我还没有解决问题。这是更多的数据
street_map2["ST_NAME"]
我按照建议尝试过这种方法,但仍然存在一些索引问题
def get_street_id(street_name):
return street_map2[street_map2['ST_NAME'].isin(df["STREET"])].iloc[0].ST_NAME
df["STREET_ID"] = df["STREET"].map(get_street_id)
df["STREET_ID"]
这会抛出这个错误
如果有帮助的话,数据帧的长度就不一样了。任何更多的想法或方法来解决上述将不胜感激。你知道吗
好吧,我设法弄明白了,但是如果你不是在完全相同的情况下使用相同的数据,解决方案可能不会有太大帮助。Bernardo Alencar的回答是基本正确的,只是在合并时我无法对字符串应用操作(我仍然不确定是否有方法可以做到这一点)。我发现另一个数据集的街道名称格式与第一个相似。然后,我将第一个数据帧与第三个新数据帧合并。在这之后,第一个和第二个都有
["STREET_ID"]
列。最后我用从而得到所需的最终数据帧和相关的街道ID
为此,需要合并这些数据帧。一种方法是:
这将做的是:它将在
ST_NAME
和STREET
列中查找相等的值,并用来自这两个数据帧的其他列的值填充行。你知道吗有关详细信息,请查看此链接:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html
此外,您尝试合并的列上的字符串必须完全匹配(包括大小写)。你知道吗
您可以使用
map
函数执行以下操作:其中
get_street_id
定义为一个函数,给定df["STREET"]
中的值。将返回一个要插入新列的值:(免责声明;目前未经测试)
我们得到一个street_map2的数据帧,它通过st name列与street name相同的位置进行过滤:
然后我们用
iloc[0]
取其中的第一个元素,并返回ST_NAME
值。你知道吗然后,我们可以通过更新索引操作来添加您在问题中提到的容错性:
或者
或者,更灵活地说:
…它将两个值都小写,例如,将“street”转换为“st”(因此映射更可能重叠),然后检查是否相等。你知道吗
如果这仍然不适合您,您可能需要在街道名称之间建立一个更精确的映射数据集!很可能街道名称太不相同,很难与字符串比较匹配。你知道吗
(如果你能提供一些街道名称的例子以及它们应该重叠的地方,我们也许能帮助你更好地发展“模糊”匹配!)
相关问题 更多 >
编程相关推荐