使用共同列合并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’参数来显示每行的来源。