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, list 的 str, 或 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_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设置为df和other中的索引。连接后的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