插件窝 干货文章 如何高效合并两个DataFrame:基于索引的巧妙连接?

如何高效合并两个DataFrame:基于索引的巧妙连接?

DataFrame 合并 索引 方法 840    来源:    2025-03-14

在Pandas中,合并两个DataFrame的高效方法之一是使用基于索引的连接。这种方法特别适用于当两个DataFrame具有相同的索引或可以通过索引对齐的情况。以下是几种常见的基于索引的合并方法:

1. 使用 join 方法

join 方法是基于索引的合并操作,默认情况下会使用左DataFrame的索引来连接右DataFrame的索引。

import pandas as pd

# 创建两个示例DataFrame
df1 = pd.DataFrame({'A': [1, 2, 3]}, index=['a', 'b', 'c'])
df2 = pd.DataFrame({'B': [4, 5, 6]}, index=['a', 'b', 'c'])

# 使用join方法合并
result = df1.join(df2)
print(result)

输出:

   A  B
a  1  4
b  2  5
c  3  6

2. 使用 merge 方法并指定 left_indexright_index

merge 方法也可以用于基于索引的合并,通过设置 left_index=Trueright_index=True 来实现。

import pandas as pd

# 创建两个示例DataFrame
df1 = pd.DataFrame({'A': [1, 2, 3]}, index=['a', 'b', 'c'])
df2 = pd.DataFrame({'B': [4, 5, 6]}, index=['a', 'b', 'c'])

# 使用merge方法合并
result = pd.merge(df1, df2, left_index=True, right_index=True)
print(result)

输出:

   A  B
a  1  4
b  2  5
c  3  6

3. 使用 concat 方法并指定 axis=1

concat 方法可以沿着指定的轴(axis=1 表示列方向)连接两个DataFrame。如果两个DataFrame的索引相同,concat 会自动对齐索引。

import pandas as pd

# 创建两个示例DataFrame
df1 = pd.DataFrame({'A': [1, 2, 3]}, index=['a', 'b', 'c'])
df2 = pd.DataFrame({'B': [4, 5, 6]}, index=['a', 'b', 'c'])

# 使用concat方法合并
result = pd.concat([df1, df2], axis=1)
print(result)

输出:

   A  B
a  1  4
b  2  5
c  3  6

4. 使用 align 方法对齐索引

如果你需要先对齐两个DataFrame的索引,然后再进行合并,可以使用 align 方法。

import pandas as pd

# 创建两个示例DataFrame
df1 = pd.DataFrame({'A': [1, 2, 3]}, index=['a', 'b', 'c'])
df2 = pd.DataFrame({'B': [4, 5, 6]}, index=['a', 'b', 'd'])

# 对齐索引
df1_aligned, df2_aligned = df1.align(df2, join='inner')

# 合并对齐后的DataFrame
result = df1_aligned.join(df2_aligned)
print(result)

输出:

   A  B
a  1  4
b  2  5

总结

  • join:适用于简单的基于索引的合并。
  • merge:适用于更复杂的合并操作,可以通过指定索引进行合并。
  • concat:适用于沿指定轴连接多个DataFrame。
  • align:适用于需要先对齐索引再进行合并的情况。

根据你的具体需求选择合适的方法,可以高效地合并两个DataFrame。