mars.dataframe.DataFrame.join#

DataFrame.join(other: 联合[DataFrame, Series], on: 可选[字符串] = None, how: 字符串 = 'left', lsuffix: 字符串 = '', rsuffix: 字符串 = '', sort: 布尔型 = False, method: 可选[字符串] = None, auto_merge: 字符串 = 'both', auto_merge_threshold: 整型 = 8, bloom_filter: 联合[布尔型, 字典] = True, bloom_filter_options: 可选[字典[字符串, 任何]] = None) DataFrame#

加入另一个 DataFrame 的列。

通过索引或关键列连接列与 其他 DataFrame。通过传递一个列表高效地一次连接多个 DataFrame 对象。

Parameters
  • 其他 (数据框, 序列, 或 数据框的列表) – 索引应该与此中的一列相似。如果传递一个 序列,则其名称属性必须被设置,并且将作为结果连接的数据框中的列名使用。

  • on (str, liststr, 或 array-like, 可选) – 在调用者中连接的列或索引级名称,在 other 中,否则按索引连接。如果给出多个值,other DataFrame 必须具有 MultiIndex。如果连接键不是已经包含在调用 DataFrame 中,可以传递一个数组。类似于 Excel 的 VLOOKUP 操作。

  • 如何 ({'left', 'right', 'outer', 'inner'}, 默认为 'left') –

    如何处理两个对象的操作。

    • left: 使用调用框架的索引(如果指定了 on,则使用列)

    • right: 使用 other 的索引。

    • outer: 将调用框架的索引(如果指定了 on,则使用列)与 other 的索引形成并集,并按字典顺序排序。

    • inner: 将调用框架的索引(如果指定了 on,则使用列)与 other 的索引形成交集,保持调用框架的顺序。

  • lsuffix (str, default '') – 从左侧框架重叠列中使用的后缀。

  • rsuffix (str, default '') – 从右侧框架重叠列中使用的后缀。

  • sort (bool, default False) – 按照连接键字典顺序对结果 DataFrame 进行排序。如果为 False,连接键的顺序取决于连接类型(如何关键字)。

  • method ({"shuffle", "broadcast"}, 默认 None) – 当一个 DataFrame 远小于另一个时,推荐使用“broadcast”,否则,“shuffle”将是更好的选择。默认情况下,我们根据实际数据大小选择方法。

  • auto_merge ({"both", "none", "before", "after"}, default both) –

    在合并之前或之后自动合并小块

    • ”both”: 在合并之前和之后自动合并小块,

    • ”none”: 不合并小块

    • ”before”: 只在合并之前合并小块

    • ”after”: 只在合并之后合并小块

  • auto_merge_threshold (int, 默认值 8) – 当how为“inner”时,合并结果可能远小于原始DataFrame,如果块的数量大于阈值,它会自动合并小块。

  • bloom_filter (bool, str, 默认 "auto") – 使用布隆过滤器来优化合并

  • bloom_filter_options (dict) –

    • “max_elements”: bloom filter中的最大元素,默认值为所有输入块的最大大小

    • ”error_rate”: 错误率,默认 0.1。

    • ”apply_chunk_size_threshold”: 应用于bloom filter的输入块的最小块大小,默认值为10,当左侧和右侧的块大小大于此阈值时,应用bloom filter

    • ”filter”: “large”, “small”, “both”,默认“large”决定是对大的、小的还是两个DataFrames都进行过滤。

Returns

一个包含调用者和其他列的数据框。

Return type

数据框

另请参阅

DataFrame.merge

用于列与列之间的操作。

示例

>>> import mars.dataframe as md
>>> df = md.DataFrame({'key': ['K0', 'K1', 'K2', 'K3', 'K4', 'K5'],
...                    'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']})
>>> df.execute()
  key   A
0  K0  A0
1  K1  A1
2  K2  A2
3  K3  A3
4  K4  A4
5  K5  A5
>>> other = md.DataFrame({'key': ['K0', 'K1', 'K2'],
...                       'B': ['B0', 'B1', 'B2']})
>>> other.execute()
  key   B
0  K0  B0
1  K1  B1
2  K2  B2

使用它们的索引连接数据框。

>>> df.join(other, lsuffix='_caller', rsuffix='_other').execute()
  key_caller   A key_other    B
0         K0  A0        K0   B0
1         K1  A1        K1   B1
2         K2  A2        K2   B2
3         K3  A3       NaN  NaN
4         K4  A4       NaN  NaN
5         K5  A5       NaN  NaN

如果我们想使用关键列进行连接,我们需要将key设置为dfother中的索引。连接后的DataFrame将以key作为其索引。

>>> df.set_index('key').join(other.set_index('key')).execute()
      A    B
key
K0   A0   B0
K1   A1   B1
K2   A2   B2
K3   A3  NaN
K4   A4  NaN
K5   A5  NaN

另一个使用关键列进行连接的选项是使用 on 参数。DataFrame.join 始终使用 other 的索引,但我们可以使用 df 中的任何列。此方法保留了原始 DataFrame 在结果中的索引。

>>> df.join(other.set_index('key'), on='key').execute()
  key   A    B
0  K0  A0   B0
1  K1  A1   B1
2  K2  A2   B2
3  K3  A3  NaN
4  K4  A4  NaN
5  K5  A5  NaN

使用非唯一键值展示它们是如何匹配的。

>>> df = md.DataFrame({'key': ['K0', 'K1', 'K1', 'K3', 'K0', 'K1'],
...                    'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']})
>>> df.execute()
  key   A
0  K0  A0
1  K1  A1
2  K1  A2
3  K3  A3
4  K0  A4
5  K1  A5
>>> df.join(other.set_index('key'), on='key').execute()
  key   A    B
0  K0  A0   B0
1  K1  A1   B1
2  K1  A2   B1
3  K3  A3  NaN
4  K0  A4   B0
5  K1  A5   B1