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

注释

有三种方法可以合并数据框:

  1. 基于索引的连接。在这种情况下,分区通过 dask.dataframe.multi.align_partitions 函数对齐。之后,每个分区与 pandas 的 merge 函数合并。

  2. 按索引和列进行连接。在这种情况下,数据框的划分(\(d_i\))通过索引合并,用于划分按列合并的数据框(\(d_c\)),使用 dask.dataframe.multi.rearrange_by_divisions。在这种情况下,合并后的数据框(\(d_m\))具有与(\(d_i\))完全相同的划分。如果你将多个来自(\(d_c\))的行合并到(\(d_i\))中的一行,这可能会导致问题。

  3. 在列上连接两者。在这种情况下,使用 dask.dataframe.multi.hash_join 执行哈希连接。

在某些情况下,如果 merge 操作需要内部 shuffle ,您可能会看到 MemoryError ,因为 shuffle 会将所有具有相同索引的行放在同一分区中。为避免此错误,请确保所有具有相同 on 列值的行都能放在单个分区中。