合并类似列上的两个数据帧

时间:2017-08-23 09:18:11

标签: 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        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中的键不匹配的信息。因此,我的结果数据框应该有一列多于df1和精确的行数。

有没有人知道为什么合并“left”在这里不起作用,因为如果我运行这样的代码,我的结果数据框有更多的列 - 根据需要 - 但也比df1更多的行,这是我不想要的。

2 个答案:

答案 0 :(得分:2)

您可以使用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_onright_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)也可以(对于您的示例)。

答案 1 :(得分:0)

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

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

我不知道为什么这不会产生与合并相同的结果......