我有两个不同的数据帧,我试图比较。所以,我的第一个数据帧有10行,第二个数据帧有2000行。我要做的是将第一个df中的第一行与另一个df中的2000行进行比较。然后在第一个df中对下一行执行相同的操作。在
这是我目前掌握的代码。它在2000年前运行良好,然后当我应该增加时,它崩溃了。在
i = 1
j = 1
for u in userFrame.iterrows():
for d in dbFrame.iterrows():
if userFrame['tag'][i] == dbFrame['tag1'][j]:
print('Found one!:' + userFrame['tag'][i])
j += 1
i += 1
编辑:以下是我得到的错误:
^{pr2}$
我不知道这是否能解决问题,但是你的代码有很多非常不和谐的特性,如果你修复了它们,你至少会得到更多有用的错误。在
首先,不必像},它就有了您想要的内置边车整数。解决方案:打开
i
和j
那样使用边车整数。在最坏的情况下,您可以使用enumerate
,但是pandas已经为您提供了一个索引,可以为您实现这一点!如果您实际查看iterrows()
的输出,一旦在df
上有{iterrows()
。。。。。。但无论如何,你根本不必使用整数。在第二,熊猫可以帮你找东西!您不必自己编写第二个迭代。解决方案:使用
.loc
{第三个是你的好主意。解决方案:使用
.loc
没有愚蠢的整数,没有双重迭代。上面的代码有10次迭代,而不是20000次。显然,您需要指定感兴趣的列。在
考虑两个数据帧之间的cross join pandas merge,结果是10x2000条记录,其中较小数据集的每条记录都与较大数据集的每条记录相匹配。Cross Join是一个特殊的SQL查询,返回两个表之间的笛卡尔积(所有可能的集合组合)。本质上是一个没有连接子句的查询。在
但是,在pandas中,您需要首先在dataframe和重命名列中创建一个
key
变量,以避免重复tags
。从那里您可以返回一个匹配的记录数据帧,并避免嵌套的for
循环。由于只需要第一行,所以可以在1 X 2000维的交叉连接操作期间对数据帧进行切片。在相关问题 更多 >
编程相关推荐