2017-08-23 157 views
1

我有以下两个dataframes,这些片段了大量的数据集:类似列合并两个dataframes

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 

我想将密钥2列添加到“钥匙”相匹配的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") 

然而,这也增加了密钥2“C”的数据集,我不想要被添加。我只想根据df1的键将变量key2追加到df1。应删除df2中与df1中的键不匹配的信息。因此,我的结果数据框应该有一列超过df1和确切数量的行。

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

+0

如果我运行代码,结果没有列与密钥2“C”。 – Deb

回答

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)也适用(例如)。

0

感谢您的回复。事实上,我是通过做:

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

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

+0

您没有提供满意地封装您的问题的MVCE。 –