首页 > 解决方案 > Pandas 以关联的字符串值将列添加到新数据框?

问题描述

我正在尝试将一列从一个数据框添加到另一个数据框,

df.head()

在此处输入图像描述

street_map2[["PRE_DIR","ST_NAME","ST_TYPE","STREET_ID"]].head()

在此处输入图像描述

PRE_DIR只是街道名称的前缀。我想要做的是将STREET_ID相关街道的列添加到df. 我尝试了一些方法,但是我对 pandas 的缺乏经验和字符串的比较妨碍了我,

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"]

这会引发此错误,

在此处输入图像描述

如果有帮助,数据帧的长度不同。任何更多的想法或解决上述问题的方法将不胜感激。

标签: pythonpandas

解决方案


为此,您需要合并这些数据框。一种方法是:

df.merge(street_map2, left_on='STREET', right_on='ST_NAME')

这将做的是:它将在ST_NAMESTREET列中查找相等的值,并用来自两个数据帧的其他列的值填充行。

检查此链接以获取更多信息:https ://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html

此外,您尝试合并的列上的字符串必须完全匹配(包括大小写)。


推荐阅读