2017-08-23 91 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。 –