如何基于索引合并两个 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 是一个二维带标签的数据结构,具有行和列,其中每一列可以具有不同的数据类型,并且行和列都已命名。

更新于: 2023-07-31

2K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.