好的 我浏览了一些与这个主题相关的博客,但是我仍然遇到同样的问题。我有两个数据帧。两者都有一列X,其中包含SHA2值。它包含十六进制字符串。在
示例(数据帧查找)
X,Y
000000000E000394574D69637264736F66742057696E646F7773204861726477,7
0000000080000000000000090099000000040005000000000000008F2A000010,7
000000020000000000000000777700010000000000020000000040C002004600,24
0000005BC614437F6BE049237FA1DDD2083B5BA43A10175E4377A59839DC2B64,7
示例(数据帧源)
^{pr2}$等等
所以现在我在做
lookup['X'] = lookup['X'].astype(str)
source['X'] = source['X'].astype(str)
source['newcolumn'] = source.merge(lookup, on='X', how='inner')['Y']
源代码有160000行,查找大约有500000行。在
现在,当操作完成时,我得到newcolumn,但是值是错误的。 我确保它们不会从X的重复值中提取,因为两个表中都没有重复的X。在
所以,这真的让我觉得很蠢,让我的生活系统很痛苦。有人能提出问题吗?在
我现在用
def getReputation(lookupDF,value,lookupcolumn,default):
lookupRows = lookupDF.loc[lookupDF['X']==value]
if lookupRows.shape[0]>0:
return lookupRows[lookupcolumn].values[0]
else:
return default
source['newcolumn'] = source.apply(lambda x: getReputation(lookup,x['X'],'Y',-1),axis=1)
这段代码很好用,但显然这是一段糟糕的代码,而且需要很长时间。我可以多处理它-但问题仍然存在。为什么合并失败?在
谢谢你的帮助 Rgds
在本例中,我将使用map()方法:
首先在
lookup
DF中将“X”设置为索引:实际上,您的代码对于示例DFs正常工作:
^{pr2}$因此,请检查两个df中
X
列中的数据和数据类型是否相同相关问题 更多 >
编程相关推荐