📅  最后修改于: 2023-12-03 15:07:28.002000             🧑  作者: Mango
在数据处理中,经常需要将两个或多个DataFrame合并成一个,具体的合并方式取决于数据的结构和目标分析。本文将介绍两种方式用于合并两个条件复杂的Pandas DataFrame,分别是merge
和join
。
首先我们需要创建两个条件复杂的DataFrame。
import pandas as pd
# 创建DataFrame1
data1 = {'age': [25, 30, 35, 20, 45],
'gender': ['M', 'F', 'M', 'F', 'M'],
'income': [5000, 6000, 4500, 5500, 7000]}
df1 = pd.DataFrame(data1)
# 创建DataFrame2
data2 = {'age': [25, 30, 25, 20, 45],
'gender': ['M', 'F', 'M', 'F', 'M'],
'expenses': [2000, 3000, 1500, 2500, 4000]}
df2 = pd.DataFrame(data2)
DataFrame1包含了age
,gender
和income
字段,DataFrame2包含了age
,gender
和expenses
字段。
merge
函数用于通过一个或多个键(列名)将不同DataFrame中的行连接起来,当DataFrame中的列存在相同的列名时,可以通过on
参数指定列名,也可以使用left_on
和right_on
参数指定左侧和右侧的列名。合并方式可以通过how
参数指定,包括inner
(默认)、outer
、left
和right
。
下面是使用merge
合并两个DataFrame的例子:
result = pd.merge(df1, df2, on=['age', 'gender'])
上述代码通过age
和gender
两个列名将两个DataFrame连接起来,生成新的DataFrame result
。默认只会保留两个DataFrame中都出现过的行,而去除其他行,即内连接(inner join
)。也就是说,result
中只保留了age=25
且gender=M
、age=30
且gender=F
、age=20
且gender=F
和age=45
且gender=M
的行。
join
函数是在DataFrame对象之间连接所使用的方法,与merge
不同的是,它使用索引而不是通常的列作为键进行连接。在此操作中,有一条重要的规则是:两个要连接起来的DataFrame中至少有一个的索引必须为唯一的。
下面是使用join
合并两个DataFrame的例子:
result = df1.set_index(['age', 'gender']).join(df2.set_index(['age', 'gender']))
上述代码将age
和gender
设置成索引,然后使用join
函数将两个DataFrame连接起来,在result
中生成新的DataFrame。每个索引在实际操作中,必须是唯一的。
使用join
时需要注意的是,在set_index
之后,需要使用reindex
函数来保证两个DataFrame的索引一致,才能进行join
操作。
上述两种方式都可以用于合并两个条件复杂的Pandas DataFrame,具体使用哪种方式,取决于数据情况和个人习惯。