【Pandas】pandas DataFrame join

Pandas2.2 DataFrame

Combining comparing joining merging

方法描述
DataFrame.assign(**kwargs)用于向 DataFrame 添加新列或替换现有列的方法
DataFrame.compare(other[, align_axis, …])用于比较两个 DataFrame 的差异的方法
DataFrame.join(other[, on, how, lsuffix, …])用于**将两个 DataFrame 按列合并(默认按行索引对齐)**的方法

pandas.DataFrame.join()

pandas.DataFrame.join() 是一个用于**将两个 DataFrame 按列合并(默认按行索引对齐)**的方法。它主要用于基于索引的连接操作,类似于 SQL 中的 JOIN 操作。


📌 方法签名
DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False, validate=None)

🔧 参数说明:
参数说明
other另一个 DataFrame 或 Series,用于合并的数据源
on指定用于连接的列名(而不是使用索引),可以是单个列名或列表
how连接方式,默认 'left',可选 'inner', 'outer', 'right'
lsuffix左边 DataFrame 的重复列名后缀
rsuffix右边 DataFrame 的重复列名后缀
sort是否对结果按索引排序,默认 False
validate验证连接类型,如 'one_to_one', 'one_to_many'

✅ 返回值
  • 返回一个新的 DataFrame,包含两个 DataFrame 合并后的数据。

🧪 示例代码及结果
示例 1:默认按索引左连接(how='left'
import pandas as pd

# 创建两个 DataFrame
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2'],
    'B': ['B0', 'B1', 'B2']
}, index=['K0', 'K1', 'K2'])

df2 = pd.DataFrame({
    'C': ['C0', 'C1', 'C3'],
    'D': ['D0', 'D1', 'D3']
}, index=['K0', 'K1', 'K3'])

# 默认 left join
result = df1.join(df2)
print(result)
输出:
     A   B    C    D
K0  A0  B0   C0   D0
K1  A1  B1   C1   D1
K2  A2  B2  NaN  NaN

示例 2:内连接(how='inner'
result = df1.join(df2, how='inner')
print(result)
输出:
     A   B   C   D
K0  A0  B0  C0  D0
K1  A1  B1  C1  D1

示例 3:外连接(how='outer'
result = df1.join(df2, how='outer')
print(result)
输出:
     A    B    C    D
K0  A0   B0   C0   D0
K1  A1   B1   C1   D1
K2  A2   B2  NaN  NaN
K3  NaN  NaN  C3   D3

示例 4:指定连接列(on=
# 使用 on 参数进行连接
df1.reset_index(inplace=True)  # 将索引转为列
df2.reset_index(inplace=True)

result = df1.join(df2.set_index('index'), on='index')
print(result)
输出:
  index   A   B    C    D
0    K0  A0  B0   C0   D0
1    K1  A1  B1   C1   D1
2    K2  A2  B2  NaN  NaN

示例 5:处理列名冲突(lsuffix, rsuffix
# 两个 DataFrame 都有列 'A'
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'C': [7, 8]})

result = df1.join(df2, lsuffix='_left', rsuffix='_right')
print(result)
输出:
   A_left  B  A_right  C
0       1  3        5  7
1       2  4        6  8

🧠 应用场景
场景说明
数据合并将多个来源的数据通过索引或键合并
特征拼接在机器学习中拼接不同特征集
补全缺失数据用另一个 DataFrame 补充当前数据中的缺失字段
时间序列对齐按时间索引合并多个指标
多表关联分析类似 SQL 的 LEFT JOIN、INNER JOIN 分析

⚠️ 注意事项
  • 默认使用索引进行连接;
  • 若使用 on=,则需确保该列为当前 DataFrame 的列;
  • 若列名冲突,必须指定 lsuffixrsuffix
  • join() 支持多个 DataFrame 合并,例如 df.join([df1, df2, df3])
  • 性能上比 merge() 更适合基于索引的连接。

✅ 对比 join() vs merge()
特性join()merge()
默认连接方式基于索引基于列
更适合添加额外列复杂的 SQL 式连接
支持多个 DataFrame❌(只能两表)
支持 on=
支持 suffixes✅(lsuffix, rsuffix✅(suffixes=('_x','_y')
更简洁

你可以根据是否基于索引、是否需要链式添加多个表来选择使用 join()merge()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liuweidong0802

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值