在 Pandas 中,我们可以通过 merge 或 join 操作来将两个 DataFrame 水平合并。如果两个 DataFrame 中存在行数不一致情况,那么会以其中行数更多的 DataFrame 为主,缺失部分将被标记为NaN。在这种情况下,我们可以使用拼接函数 concat 解决这个问题,和 merge 或 join 过程不同的是,它只能做水平和垂直的拼接(column或者index的方向),而不是两个 DataFrame 之间的连接。那么下面我们将详细讲解如何在 Pandas 中从另一个 DataFrame 中添加列,同时提供实例说明。
假设我们有两个 DataFrame: df1 和 df2,其中 df1 中包含员工姓名和工号,而 df2 中包含员工工号和年龄:
# 创建 df1
df1 = pd.DataFrame({
'姓名': ['小张', '小王', '小赵', '小李'],
'工号': ['001', '002', '003', '004']
})
# 创建 df2
df2 = pd.DataFrame({
'年龄': [26, 30, 28, 35],
'工号': ['001', '002', '004', '006']
})
现在我们想要将 df2 中的年龄列添加到 df1 中,以员工工号为关联键:
# 使用 merge 将两个 DataFrame 合并(基于工号)
merged = pd.merge(df1, df2, on='工号', how='left')
display(merged)
输出结果如下:
姓名 工号 年龄
0 小张 001 26.0
1 小王 002 30.0
2 小赵 003 NaN
3 小李 004 28.0
这里我们使用了 Pandas 的 Merge 函数,在合并时使用了 left 方式合并,以 df1 为左侧数据集为基础,同时如何中出现缺失,则填充为 NaN。该函数主要以 df1 的工号为关联字段,来将两个 DataFrame 进行合并。合并完成后就能输出员工的信息,其中姓名、工号一一对应,但年龄是从 df2 中提取的。
除此之外,我们还可以使用 concat 函数来实现从一个 DataFrame 中添加指定的列。在此,我们需要给 df1 增加一列,该列包含 df2 中所对应的员工年龄。我们可以这么做:
df1 = pd.concat([df1, df2['年龄']], axis=1)
display(df1)
这里,我们使用了 concat 函数,将两个 DataFrame 进行拼接,其中 axis=1 表示水平拼接,也就是按列方向拼接,这样子 df2 中的年龄列就被添加到了 df1 中,而无需 merge 操作。这种方法是适用于列测试功能的小方案(不需要对数据筛选,筛选后我仍然推荐 Merge 方法来新增列)。