dask_expr._collection.DataFrame.merge
dask_expr._collection.DataFrame.merge¶
- DataFrame.merge(right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, suffixes=('_x', '_y'), indicator=False, shuffle_method=None, npartitions=None, broadcast=None)[源代码]¶
将 DataFrame 与另一个 DataFrame 合并
这将合并两个数据集,无论是基于索引、每个数据集中的某一列,还是基于一个数据集的索引和另一个数据集的列。
- 参数
- 右: dask.dataframe.DataFrame
- 如何{‘left’, ‘right’, ‘outer’, ‘inner’, ‘leftsemi’}, 默认: ‘inner’
如何处理两个对象的操作:
left: 使用调用帧的索引(或在指定时使用列)
right: 使用其他框架的索引
outer: 将调用帧的索引(如果指定了on,则为列)与其他帧的索引合并,并按字典顺序排序
inner: 将调用帧的索引(如果指定了on,则为列)与其他帧的索引相交,保持调用帧的顺序
leftsemi: 选择左表中所有行,其中连接键可以在右表中找到。如果键在右表中重复,不会重复行。丢弃右表中的所有列。
- 开标签或列表
要连接的列或索引级别名称。这些名称必须同时存在于两个 DataFrame 中。如果 on 为 None 且不基于索引进行合并,则默认使用两个 DataFrame 中列的交集。
- left_on标签或列表,或类数组
左 DataFrame 中用于连接的列。除了在 pandas 数组和列表中,只有当它们的长度为 1 时才支持。
- right_on标签或列表,或类数组
右DataFrame中用于连接的列。除了在pandas数组和列表中,只有当它们的长度为1时才支持。
- left_index布尔值,默认 False
使用左侧DataFrame的索引作为连接键。
- right_index布尔值,默认 False
使用右侧DataFrame的索引作为连接键。
- 后缀2-长度序列 (元组, 列表, …)
分别应用于左侧和右侧重叠列名的后缀
- 指标布尔值或字符串,默认 False
如果为 True,则在输出 DataFrame 中添加一个名为 “_merge” 的列,该列包含每行来源的信息。如果为字符串,则会在输出 DataFrame 中添加一个包含每行来源信息的列,并且该列将被命名为字符串的值。信息列是类别类型的,取值为 “left_only” 表示合并键仅出现在 left DataFrame 中的观察值,”right_only” 表示合并键仅出现在 right DataFrame 中的观察值,如果观察值的合并键在两者中都出现,则为 “both”。
- npartitions: int 或 None, 可选
理想的输出分区数量。这仅在执行 hash_join(仅在列上合并)时使用。如果
None
,则npartitions = max(lhs.npartitions, rhs.npartitions)
。默认值为None
。- shuffle_method: {‘disk’, ‘tasks’, ‘p2p’}, 可选
可以是
'disk'
用于单节点操作,或者是'tasks'
和'p2p'
用于分布式操作。将由您当前的调度器推断。- broadcast: boolean 或 float, 可选
是否在支持的情况下使用基于广播的连接来替代基于洗牌的连接。默认情况下,将使用一个简单的启发式方法来选择底层算法。如果指定了一个浮点数值,该数值将被用作简单启发式方法中的
broadcast_bias``(较大的数值使 Dask 更有可能选择 ``broacast_join
代码路径)。更多信息请参见broadcast_join
。
注释
有三种方法可以合并数据框:
基于索引的连接。在这种情况下,分区通过
dask.dataframe.multi.align_partitions
函数对齐。之后,每个分区与 pandas 的 merge 函数合并。按索引和列进行连接。在这种情况下,数据框的划分(\(d_i\))通过索引合并,用于划分按列合并的数据框(\(d_c\)),使用
dask.dataframe.multi.rearrange_by_divisions
。在这种情况下,合并后的数据框(\(d_m\))具有与(\(d_i\))完全相同的划分。如果你将多个来自(\(d_c\))的行合并到(\(d_i\))中的一行,这可能会导致问题。在列上连接两者。在这种情况下,使用
dask.dataframe.multi.hash_join
执行哈希连接。
在某些情况下,如果
merge
操作需要内部shuffle
,您可能会看到MemoryError
,因为 shuffle 会将所有具有相同索引的行放在同一分区中。为避免此错误,请确保所有具有相同on
列值的行都能放在单个分区中。