擅长:python、mysql、java
<p>考虑两个数据帧之间的<a href="https://stackoverflow.com/questions/13269890/cartesian-product-in-pandas">cross join pandas merge</a>,结果是10x2000条记录,其中较小数据集的每条记录都与较大数据集的每条记录相匹配。<a href="http://www.tutorialspoint.com/sql/sql-cartesian-joins.htm" rel="nofollow noreferrer">Cross Join</a>是一个特殊的SQL查询,返回两个表之间的笛卡尔积(所有可能的集合组合)。本质上是一个没有连接子句的查询。在</p>
<p>但是,在pandas中,您需要首先在dataframe和重命名列中创建一个<code>key</code>变量,以避免重复<code>tags</code>。从那里您可以返回一个匹配的记录数据帧,并避免嵌套的<code>for</code>循环。由于只需要第一行,所以可以在1 X 2000维的交叉连接操作期间对数据帧进行切片。在</p>
<pre><code>userFrame['key'] = 1
dbFrame['key'] = 1
userFrame = userFrame.rename(columns = {'Tag':'Tag_U'})
dbFrame = dbFrame.rename(columns = {'Tag':'Tag_D'})
# CROSS JOIN MERGE (FIRST ROW OF USER DF, ALL ROWS OF DB DF)
crossjoindf = pd.merge(userFrame[:1], dbFrame, on='key')[['Tag_U', 'Tag_D']]
# MATCHING RECORDS
matchingdf = crossjoindf[crossjoindf['Tag_U'] == crossjoindf['Tag_D']]
</code></pre>