【发布时间】:2019-04-28 15:11:43
【问题描述】:
我打算合并两个数据框,芝加哥犯罪数据和 Redfin 房地产数据,但 Redfin 数据是按芝加哥社区收集的,而犯罪数据是按社区区域收集的。为此,我在芝加哥找到了neighborhood map,我有点想出如何将社区分配给社区。两个数据帧的结构有点不同,所以我做了一些步骤操作。以下是有关我尝试的详细信息:
示例数据 sn-p
这是我可以查看example data snippet 的公共要点。
这是我从网上收集的neighborhood mapping。
我的解决方案
这是我的第一个映射解决方案:
code_pairs_neighborhoods = [[p[0], p[1]] for p in [pair.strip().split('\t') for pair in neighborhood_Map.strip().split('\n')]]
neighborhood_name_dic = {k[0]:k[1] for k in code_pairs_neighborhoods} #neighborhood -> community area
chicago_crime['neighborhood'] = chicago_crime['community_name'].map(neighborhood_name_dic)
Redfin['neighborhood'] = Redfin['Region'].map(neighborhood_name_dic)
final_df= pd.merge(chicago_crime, chicago_crime, on='neighborhood')
但是这个解决方案没有找到正确的映射,neighborhood 变成了 NAN,这是错误的。
第二次映射尝试:
在不使用邻域映射的情况下,我直观地提出了这个映射解决方案:
chicago_crime['community_name']=[[y.split() for y in x] for x in chicago_crime['community_name']]
Redfin['Region']= [[j.split() for j in i] for i in Redfin['Region']]
idx, datavalue = [], []
for i,dv in enumerate(chicago_crime['community_name']):
for d in dv:
if d in Redfin['Region'][i]:
if i not in idx:
idx.append(i)
datavalue.append(d)
chicago_crime['merge_ref'] = datavalue
Redfin['merge_ref'] = datavalue
final_df= pd.merge(chicago_crime[['community_area','community_name','merge_ref']], Redfin, on='merge_ref')
但是这个解决方案给了我错误:ValueError: Length of values does not match length of index, AttributeError: 'list' object has no attribute 'split'。
我怎样才能做到这一点?基于neighborhood mapping,如何获得 Redfin 数据和芝加哥犯罪数据的正确映射?有什么想法可以使此映射正确并获得正确的合并数据框吗?任何想法?提前致谢。
更新:
我将包括数据集在内的所有解决方案都放在了这个 github 存储库 all solution and data on github
【问题讨论】:
-
我们需要更多信息来帮助您,例如
neighborhood_Map是什么,您如何读取您发布的数据(例如,chicago_crime是否来自read_csv?),您想通过所有这些split()实现什么目标?也许您可以给我们 2-3 行输入和您想要的输出? -
您不能将您的主要代码包含在您链接到的 Github 中(或者这不是您的 github 存储库吗?)?另外,我认为编辑您的问题,使其包括您如何创建
Redfin、chicago_crime、neighborhood_Map等,将非常有帮助 -
-
您是否查看了我链接到的文章(在我的答案的最底部)并决定了您需要哪种类型的加入?您应该能够“玩转”不同的合并,看看什么最适合您!
-
你仍然可以使用我之前发布的
pd.merge(…),只要确保你在Update2 之前 合并。下面的代码框只是为了证明您将在内部联接中更新 46 个条目。