使用df.join()时获取指示符列

2024-09-25 00:25:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在从事一个涉及要合并的巨大数据帧的项目。以下代码:

mergeddf = pd.merge(left=leftDataFrame,right=rightDataFrame,right_on = rightKey, left_on = leftKey, how='outer', suffixes = [leftName,rightName], indicator=True)

返回一个名为“\u merge”(由于选项indicator=True)的列的合并数据帧,该列指示该行是否存在于“left\u only”、“right\u only”或“both”中

然而,我发现合并需要很多时间,特别是当有许多列以及可能的行时(我在有18列的50K行的块上运行这个)。我在Improve Pandas Merge performance中尝试的另一种方法是将我的“键”列设置为作为索引连接,然后使用df.join(df2,how='outer'),它的运行速度明显更快

但我的问题是join()没有返回我绝对需要的“_merge”指示符列。当使用join()时,是否有任何方法可以获取关于哪个行属于哪个数据帧(或两者)的信息


Tags: 数据项目方法代码righttrueonlyon
1条回答
网友
1楼 · 发布于 2024-09-25 00:25:01

@ayhan在我面前做出了正确的评论,但这里有一个详细说明:

leftDataFrame = leftDataFrame.set_index(leftKey)
rightDataFrame = rightDataFrame.set_index(rightKey)
mergeddf = pd.merge(
    left=leftDataFrame,
    right=rightDataFrame,
    left_index=True,
    right_index=True,
    how='outer',
    suffixes = [leftName, rightName],
    indicator=True)

根据文件(https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html):

The related join() method, uses merge internally for the index-on-index (by ?>default) and column(s)-on-index join. If you are joining on index only, you may >wish to use DataFrame.join to save yourself some typing.

深入研究代码,您会发现the code不仅仅是一个围绕merge的包装器,它更为复杂,但join的核心功能是通过these lines捕获的:

                joined = merge(
                    joined, frame, how=how, left_index=True, right_index=True
                )

相关问题 更多 >