DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False) 源代码
在索引或键列上与其他DataFrame连接列。通过传递列表,有效地通过索引连接多个DataFrame对象。
参数: | other: 或 索引,应该类似于此列中的一列。 如果传递了 并将其用作生成的连接DataFrame中的列名 on:name,tuple / names 列表或array-like 调用者中的列或索引级别名称,用于连接其他索引, 否则加入index-on-index。如果给定多个值,则另一个 DataFrame, 必须具有MultiIndex。如果数组尚未包含在调用DataFrame中, 则可以将数组作为连接键传递。像Excel VLOOKUP操作一样
如何处理这两个对象的操作。 1)left:使用调用框架的索引 (如果指定了on,则使用列) 2)right:使用其他框架的索引 3)outer:调用框架索引的形式联合 (或指定的列)与其他框架的索引, 并按字典顺序对其进行排序 4)inner:调用框架索引(或指定的列)与其他框架索引的形式交集, 保留调用框架的索引顺序 lsuffix: 使用左框架重叠列的后缀 rsuffix: 使用右框架重叠列的后缀 sort:布尔值,默认为 通过联接键按词法对结果 则连接键的顺序取决于连接类型(关键字) |
返回: | 连接的 |
说明:
传递DataFrame
对象列表时,不支持on
,lsuffix
和rsuffix
选项
版本0.23.0中添加了对指定索引级别,作为on参数的支持
例如,
import pandas as pd
# 创建caller DataFrame
caller = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3', 'K4', 'K5'],
'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']})
# 创建other DataFrame
other = pd.DataFrame({'key': ['K0', 'K1', 'K2'],
'B': ['B0', 'B1', 'B2']})
# 使用 key 列进行连接
result = caller.join(other.set_index('key'), on='key', lsuffix='_caller', rsuffix='_other')
print(result)
'''
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
'''
使用索引加入DataFrames
>>> caller.join(other, lsuffix='_caller', rsuffix='_other')
>>> A key_caller B key_other
0 A0 K0 B0 K0
1 A1 K1 B1 K1
2 A2 K2 B2 K2
3 A3 K3 NaN NaN
4 A4 K4 NaN NaN
5 A5 K5 NaN NaN
如果要使用键列进行连接,需要将键设置为调用者和其他者的索引。连接的DataFrame将键作为索引。
import pandas as pd
# 创建第一个DataFrame
data_caller = {
'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5'],
'key_caller': ['K0', 'K1', 'K2', 'K3', 'K4', 'K5']
}
df_caller = pd.DataFrame(data_caller)
# 创建第二个DataFrame
data_other = {
'B': ['B0', 'B1', 'B2'],
'key_other': ['K0', 'K1', 'K2']
}
df_other = pd.DataFrame(data_other)
# 使用join进行连接
result = df_caller.join(df_other.set_index('key_other'), on='key_caller', lsuffix='_caller', rsuffix='_other')
print(result)
'''
A key_caller B
0 A0 K0 B0
1 A1 K1 B1
2 A2 K2 B2
3 A3 K3 NaN
4 A4 K4 NaN
5 A5 K5 NaN
'''
使用键列连接的另一个选项,使用on参数。DataFrame.join是使用其他索引,但可以使用调用者中的任何列。此方法在结果中保留原始调用者的索引。
import pandas as pd
# 创建 caller DataFrame
caller = pd.DataFrame({
'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5'],
'key': ['K0', 'K1', 'K2', 'K3', 'K4', 'K5']
})
# 创建 other DataFrame
other = pd.DataFrame({
'B': ['B0', 'B1', 'B2'],
'key': ['K0', 'K1', 'K2']
})
# 使用 join 方法,将 other DataFrame 按照 'key' 列的值与 caller DataFrame 进行连接
result = caller.join(other.set_index('key'), on='key')
print(result)
'''
A key B
0 A0 K0 B0
1 A1 K1 B1
2 A2 K2 B2
3 A3 K3 NaN
4 A4 K4 NaN
5 A5 K5 NaN
'''