看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pandas.DataFrame.join
方法用于将两个数据集(DataFrame)进行合并,通常是基于索引来进行合并。它特别适合在具有相同或相关索引的两个 DataFrame 之间进行横向合并。
连接另一个DataFrame的列。将列与索引或键列上的其他DataFrame连接起来。通过传递列表,一次按索引高效地连接多个DataFrame对象。
DataFrame.join(
other,
on=None,
how='left',
lsuffix='',
rsuffix='',
sort=False,
validate=None
)
other:
DataFrame
、Series
或 list
(含多个 DataFrame 或 Series)on:
str
或 list
how:
str
('left'
, 'right'
, 'outer'
, 'inner'
)'left'
,即左连接。'right'
是右连接,'outer'
是外连接,'inner'
是内连接。lsuffix:
str
rsuffix:
str
sort:
bool
False
,即不排序。validate:
str
('1:1'
, '1:m'
, 'm:1'
, 'm:m'
)'1:1'
表示一对一,'1:m'
表示一对多,'m:1'
表示多对一,'m:m'
表示多对多。DataFrame
,包含合并后的数据。join
是非常方便的工具。join
可以用于将多个 DataFrame 一次性合并到一个基础 DataFrame 中。join
可以将不同数据集中的特征合并到一个数据集中,常用于特征工程中。df = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3', 'K4', 'K5'],
'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']})
df
'''
key A
0 K0 A0
1 K1 A1
2 K2 A2
3 K3 A3
4 K4 A4
5 K5 A5
'''
other = pd.DataFrame({'key': ['K0', 'K1', 'K2'],
'B': ['B0', 'B1', 'B2']})
other
'''
key B
0 K0 B0
1 K1 B1
2 K2 B2
'''
使用DataFrames的索引连接DataFrames。
df.join(other, lsuffix='_caller', rsuffix='_other')
'''
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
'''
如果我们想使用键列进行连接,我们需要将键设置为df和other中的索引。连接的DataFrame将以键作为索引。
df.set_index('key').join(other.set_index('key'))
'''
A B
key
K0 A0 B0
K1 A1 B1
K2 A2 B2
K3 A3 NaN
K4 A4 NaN
K5 A5 NaN
'''
使用键列连接的另一种选择是使用on参数。DataFrame.join总是使用别人的索引,但我们可以使用df中的任何列。此方法在结果中保留原始DataFrame的索引。
df.join(other.set_index('key'), on='key')
'''
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 = pd.DataFrame({'key': ['K0', 'K1', 'K1', 'K3', 'K0', 'K1'],
'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']})
df
'''
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', validate='m:1')
'''
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
'''
以下示例展示如何使用 pandas.DataFrame.join
函数将两个基于索引的数据集进行合并。
import pandas as pd
# 构造示例数据
data1 = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
}, index=['a', 'b', 'c'])
data2 = pd.DataFrame({
'C': [7, 8],
'D': [9, 10]
}, index=['b', 'c'])
print("data1:")
print(data1)
print("\ndata2:")
print(data2)
# 使用 join 进行合并
merged_data = data1.join(data2, how='left')
print("\n合并后的数据:")
print(merged_data)
输出结果:
data1:
A B
a 1 4
b 2 5
c 3 6
data2:
C D
b 7 9
c 8 10
合并后的数据:
A B C D
a 1 4 NaN NaN
b 2 5 7.0 9.0
c 3 6 8.0 10.0
在这个例子中,pandas.DataFrame.join
按索引将 data2
合并到 data1
中。由于使用的是 'left'
连接,data1
中的所有行都保留,而在 data2
中找不到匹配索引的行会填充为 NaN。
更新时间:2024-08-14 16:16:28 标签:pandas python 合并