使用共同列合并Pandas DataFrame

使用共同列合并Pandas DataFrame

在数据分析过程中,我们经常需要将两个或多个DataFrame进行合并,以便进行更深入的分析。在Pandas中,我们可以使用merge函数来实现DataFrame的合并。但是,当我们想要合并的DataFrame拥有共同列时,会出现一个问题:merge默认会将这些共同列作为key进行外连接,导致我们得到的结果并非我们所需要的。本篇文章将会为大家介绍如何使用共同列来合并Pandas DataFrame。

首先,我们需要了解Pandas中merge函数的参数。merge函数的参数包括:

  • left: 要合并的左侧DataFrame
  • right: 要合并的右侧DataFrame
  • on: 合并的列名,可以是一列或多列
  • how: 指定连接方式,包括’left’、’right’、’outer’和’inner’
  • suffixes: 指定如果两个DataFrame中有相同列名的情况下,如何处理重名列,例如(‘_x’, ‘_y’)
  • indicator: 指定是否保留一个特殊的’_merge’列,用于显示哪些数据是从哪个DataFrame合并而来的

更多Pandas相关文章,请阅读:Pandas 教程

merge默认行为

首先,我们来看一下merge函数默认的行为。我们先定义两个有一列相同的DataFrame:

import pandas as pd

df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value1': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['B', 'C', 'D'], 'value2': [4, 5, 6]})

这两个DataFrame有一列相同的key。我们现在使用merge将它们合并在一起:

merged_df = pd.merge(df1, df2)
print(merged_df)

输出结果如下:

  key  value1  value2
0   B       2       4
1   C       3       5

我们可以看到,merge默认将key作为key column进行连接,并且只保留了两个DataFrame中key列相同的行。

使用共同列合并DataFrame

对于上面这个例子,我们需要的是将两个DataFrame按照key列的值进行合并,而不是将key列作为key column进行合并。我们可以通过将on参数设置为key来实现这个功能:

merged_df = pd.merge(df1, df2, on='key')
print(merged_df)

输出结果如下:

  key  value1  value2
0   B       2       4
1   C       3       5

我们可以看到,现在输出结果符合我们对于合并的期望。

但是,如果两个DataFrame中除了key列以外,还有其他相同的列,那么这些列会被重命名并添加前后缀。例如:

df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['B', 'C', 'D'], 'value': [4, 5, 6]})

merged_df = pd.merge(df1, df2, on='key', suffixes=('_left','_right'))
print(merged_df)

输出结果如下:

  key  value_left  value_right
0   B          2            4
1   C          3            5

我们可以看到,由于两个DataFrame中都有一个value列,所以在合并时,Pandas自动将这些列重命名,并添加了’_left’和’_right’前缀。

显示合并来源

有时候,我们需要知道合并后的行到底是来自哪个DataFrame。为了解决这个问题,Pandas提供了一个’indicator’参数,用于显示每一行是从哪个DataFrame合并而来的。例如:

merged_df= pd.merge(df1, df2, on='key', how='outer', indicator=True)
print(merged_df)

输出结果如下:

  key  value_left  value_right     _merge
0   A        1.0          NaN  left_only
1   B        2.0          4.0       both
2   C        3.0          5.0       both
3   D        NaN          6.0  right_only

我们可以看到,最后结果中添加了一个’_merge’列,用于表示每行的来源。’left_only’表示这一行来自左侧DataFrame,’right_only’则表示来自右侧DataFrame,’both’则表示同时存在于两个DataFrame中。

结论

在使用Pandas进行数据分析时,合并多个DataFrame是非常常见的操作。然而,当合并的DataFrame中存在共同列时,很容易出现合并结果不符合预期的问题。通过本文的介绍,我们可以知道如何使用共同列来合并Pandas DataFrame,并了解到如何使用’indicator’参数来显示每行的来源。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

Pandas 教程