如何基于索引合并两个 Pandas DataFrame?
在许多数据分析场景中,基于索引合并两个 Pandas DataFrame 非常有用。例如,您可能有两个具有不同特征或数据点的数据集,但它们都共享一个公共索引。在这种情况下,合并这两个 DataFrame 可以帮助您以有意义的方式组合数据。
在本文中,我们将学习如何在 Python 中基于索引合并两个 Pandas DataFrame。我们将逐步介绍合并过程中涉及的所有步骤,并通过代码示例说明每个步骤。
什么是 Pandas 中的 DataFrame?
DataFrame 是 Pandas 库中最关键的数据结构之一。类似于电子表格、SQL 表或 Series 对象的字典,它是一个带标签的二维数据结构,其列可以具有不同的类型。作为 Pandas 的主要数据结构,它被广泛用于数据操作、数据清理和分析。
DataFrame 由行和列组成,其中每一列可以具有不同的数据类型(例如,int、float、string 等)。由于每一行和每一列都带有标签,因此可以轻松访问和操作数据。行名称为索引,列名称为列。
在 Python 中使用 Pandas 合并两个 DataFrame 的步骤
步骤 1:导入模块
在 Python 中使用 pandas 合并两个 DataFrame 的第一步是导入所需的模块,例如 pd。在本例中,我们将使用 Pandas 进行数据处理和合并,以及 NumPy 进行一些操作。以下是导入模块的语法:
import pandas as pd import numpy as np
步骤 2:创建示例 DataFrame
下一步是创建一些示例 DataFrame 以使用 pandas 合并它们。为了本例的目的,我们将创建两个带有随机数据的示例 DataFrame,其中这两个 DataFrame 将具有相同的索引,但列不同。以下是创建示例 DataFrame 的语法:
# Creating two DataFrames having the same index
mydf1 = pd.DataFrame({'First': [10, 20, 30], 'Second': [40, 50, 60]}, index=['a', 'b', 'c'])
mydf2 = pd.DataFrame({'Third': [70, 80, 90], 'Four': [100, 110, 120]}, index=['a', 'b', 'c'])
步骤 3:基于索引合并
我们的下一步是基于索引合并这两个 DataFrame,为此我们将使用 merge() 函数并将 left_index 和 right_index 参数设置为 True。这将确保基于 DataFrame 的索引进行合并。
# Merge DataFrames on index merged_df = pd.merge(df1, df2, left_index=True, right_index=True) print(merged_df)
在上面合并的 DataFrame 中,我们可以看到来自两个 DataFrame 的列已合并,并且数据点已基于公共索引进行匹配。
步骤 4:合并具有不同索引的 DataFrame
如果两个 DataFrame 具有不同的索引,我们仍然可以通过使用 join() 函数基于索引合并它们。我们可以将 how 参数指定为 outer 以包含来自两个 DataFrame 的所有行,并将 on 参数指定为 index 以基于索引合并。
# Creating two DataFrames having the same index
mydf1 = pd.DataFrame({'First': [10, 20, 30], 'Second': [40, 50, 60]}, index=['a', 'b', 'c'])
mydf2 = pd.DataFrame({'Third': [70, 80, 90], 'Four': [100, 110, 120]}, index=['a', 'b', 'c'])
# Merging the DataFrames on index using join() function
mymerged_df = mydf1.join(mydf2)
# Print the merged DataFrame
print(mymerged_df)
就是这样!现在,我们将看到一些使用不同方法基于索引合并两个 pandas DataFrame 的示例。
示例 1:使用 Merge() 函数
在给定的示例中,我们使用了 merge() 函数在 Python 中基于索引合并两个 DataFrame。在这里,我们创建了两个 DataFrame mydf1 和 mydf2,它们具有相同的索引。然后,我们使用 merge() 函数基于它们的索引合并 DataFrame。合并两个 DataFrame 后,我们将结果 DataFrame 另存为 mymerged_df,它包含来自两个 DataFrame 的列,并基于它们的索引进行组合。
import pandas as pd
# Creating two DataFrames having the same index
mydf1 = pd.DataFrame({'First': [10, 20, 30], 'Second': [40, 50, 60]}, index=['a', 'b', 'c'])
mydf2 = pd.DataFrame({'Third': [70, 80, 90], 'Four': [100, 110, 120]}, index=['a', 'b', 'c'])
# Merging the DataFrames on index using merge() function
mymerged_df = pd.merge(mydf1, mydf2, left_index=True, right_index=True)
# Print the merged DataFrame
print(mymerged_df)
输出
First Second Third Four a 10 40 70 100 b 20 50 80 110 c 30 60 90 120
示例 2:使用 Join() 函数
在给定的示例中,我们使用了 join() 函数在 Python 中基于索引合并两个 DataFrame。在这里,我们创建了两个 DataFrame mydf1 和 mydf2,它们具有不同的索引。然后,我们使用 join() 函数基于它们的索引合并 DataFrame。合并两个 DataFrame 后,我们将结果 DataFrame 另存为 mymerged_df,它包含来自两个 DataFrame 的列,并基于它们的索引进行组合。但是,在两个 DataFrame 中都不存在的行对于缺少的列具有 NaN 值。
import pandas as pd
# Creating two DataFrames having the same index
mydf1 = pd.DataFrame({'First': [10, 20, 30], 'Second': [40, 50, 60]}, index=['a', 'b', 'c'])
mydf2 = pd.DataFrame({'Third': [70, 80, 90], 'Four': [100, 110, 120]}, index=['a', 'b', 'c'])
# Merging the DataFrames on index using join() function
mymerged_df = mydf1.join(mydf2)
# Print the merged DataFrame
print(mymerged_df)
输出
First Second Third Four a 10 40 70 100 b 20 50 80 110 c 30 60 90 120
示例 3:使用 Concat() 函数
在给定的示例中,我们使用了 concat() 函数在 Python 中基于索引合并两个 DataFrame。在这里,我们使用 concat() 函数合并 DataFrame。通过指定 axis=1,我们将 DataFrame 水平连接,组合列。结果 DataFrame mymerged_df 包含来自两个 DataFrame 的列,并基于它们的索引进行组合。
示例
import pandas as pd
# Creating two DataFrames having the same index
mydf1 = pd.DataFrame({'First': [10, 20, 30], 'Second': [40, 50, 60]}, index=['a', 'b', 'c'])
mydf2 = pd.DataFrame({'Third': [70, 80, 90], 'Four': [100, 110, 120]}, index=['a', 'b', 'c'])
# Merging the DataFrames on index using concat() function
mymerged_df = pd.concat([mydf1, mydf2], axis=1)
# Print the merged DataFrame
print(mymerged_df)
输出
First Second Third Four a 10 40 70 100 b 20 50 80 110 c 30 60 90 120
结论
在本文中,我们学习了如何基于索引组合两个 Pandas DataFrame。当两个数据集共享一个公共索引但具有不同的特征或数据点时,基于索引合并两个 Pandas DataFrame 在各种数据分析场景中都很有用。Pandas 库使合并 DataFrame 变得简单有效,可以使用 merge() 和 join() 等各种函数。来自两个 DataFrame 的列被组合到最终的 DataFrame 中,基于它们的索引。DataFrame 是一个二维带标签的数据结构,具有行和列,其中每一列可以具有不同的数据类型,并且行和列都已命名。
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP