Python 合并相似列上的两个数据帧

Python 合并相似列上的两个数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我有以下两个数据帧,它们是来自大型数据集的片段: df1: date key number 2000 1 50 2001 1 40 2000 2 600 2001 2 650 df2: key key2 1 A 2 B 3 C 我想将key2列添加到“key”上匹配的df1列。结果应如下所示: date key number key2 2000 1 50

我有以下两个数据帧,它们是来自大型数据集的片段:

df1: 
date key    number 
2000  1      50
2001  1      40
2000  2      600
2001  2      650

df2:
key   key2
1       A
2       B 
3       C
我想将key2列添加到“key”上匹配的df1列。结果应如下所示:

date key    number    key2
2000  1      50        A
2001  1      40        A
2000  2      600       B
2001  2      650       B
为此,我使用以下命令:

result = pd.merge(df1, df2, how="left", on="key")
但是,这也会将key2“C”添加到数据集中,我不想添加它。我只希望基于df1的键将变量key2附加到df1。应该删除df2中与df1中的键不匹配的信息。因此,我的结果dataframe应该比df1多出一列,并有确切的行数


有人知道为什么合并“left”在这里不起作用吗?因为如果我像这样运行代码,我的结果dataframe会比df1多出1列,但也比df1多出1行,这是我不想要的

您可以使用
pd.Series.replace

In [242]: df1['key2'] = df1.key.replace(dict(df2.values)); df1
Out[242]: 
   date  key  number key2
0  2000    1      50    A
1  2001    1      40    A
2  2000    2     600    B
3  2001    2     650    B

您还可以使用
df.merge
为合并指定
left\u on
right\u on
列:

In [251]: df1.merge(df2, left_on='key', right_on='key')
Out[251]: 
   date  key  number key2
0  2000    1      50    A
1  2001    1      40    A
2  2000    2     600    B
3  2001    2     650    B

事实上,您可以省略关键字参数,
pd.merge(df1,df2)
也可以工作(以您为例)。

感谢您的回复。我实际上是通过以下方式完成的:

result= df1.join(df2, how="left", on="key", lsuffix='_', rsuffix='_')

我不知道为什么这不会产生与merge相同的结果…

如果我运行您的代码,结果中没有带有键2“C”的列。您没有提供一个MVCE来令人满意地封装您的问题。