2017-10-18 64 views
1

我試圖匹配三列上的兩個數據幀,即「ticker」,「year」和「quarter」。雖然第一個數據集包含兩個觀測值(即兩行),每個季度,每年,每季度,第二個數據集僅包含一行......特別是,第一個數據幀始終在同一季度捕獲兩個不同的揚聲器,而第二個數據幀僅捕獲公司信息。現在,我想匹配數據幀,以便同一公司季度內第一個數據幀的兩行中的每一行都與第二個數據幀中的相關行合併。連接兩個數據幀,其中一個數據幀中的每一行與其他數據幀中的兩行匹配

我的數據如下所示: DF

ticker year quarter exec_lname jobposition 
XX  2009 3  A   CEO 
XX  2009 3  B   CFO 
XX  2009 4  A   CEO 
XX  2009 4  B   CFO 
YY  2007 1  C   CEO 
YY  2007 1  D   CFO 
YY  2007 2  C   CEO 
YY  2007 2  D   CFO 
ZZ  2008 3  F   CEO 
ZZ  2008 3  G   CFO 

dfnew

ticker year quarter eps calldate 
XX  2009 3  x Mar 
XX  2009 4  y Apr 
YY  2007 1  z Feb 
YY  2007 2  a Jan 
ZZ  2008 3  b Dec 

最後,它應該是這樣的:

ticker year quarter exec_lname jobposition eps calldate 
XX  2009 3  A   CEO   x Mar 
XX  2009 3  B   CFO   x Mar 
XX  2009 4  A   CEO   y Apr 
XX  2009 4  B   CFO   y Apr 
YY  2007 1  C   CEO   z Feb 
YY  2007 1  D   CFO   z Feb 
YY  2007 2  C   CEO   a Jan 
YY  2007 2  D   CFO   a Jan 
ZZ  2008 3  F   CEO   b Dec 
ZZ  2008 3  G   CFO   b Dec 

我想:

dfjoin = pd.merge(dfnew, df, how='left', left_on=['ticker', "year", "quarter"], right_on = ['ticker', "year", "quarter"]) 

但它返回新的數據集包含所有正確的行和列,但列eps和calldate完全充滿了NaN。可能這是因爲我想將兩行合併到df中?問題不在於合併多個鍵 - 問題可能是在第一個數據框中,我總是有兩行,具有相同的ticker/year/quarter組合。

我希望有人能幫助我! 謝謝! 朱莉婭

+0

只需使用df1.merge(DF2,上= ['ticker','year','quarter']) – Vaishali

+0

[基於Python熊貓中的多個鍵合併兩個表]的可能的副本(https://stackoverflow.com/questions/32277473/merge-two-tables-based在python熊貓) – Vaishali

+0

這使我的所有列,但0行... – Julia

回答

0

使用默認參數如何=「內部」

df.merge(dfnew, on = ['ticker', 'year', 'quarter']) 

合併你得到

ticker year quarter exec_lname jobposition eps calldate 
0 XX  2009 3  A   CEO   x Mar 
1 XX  2009 3  B   CFO   x Mar 
2 XX  2009 4  A   CEO   y Apr 
3 XX  2009 4  B   CFO   y Apr 
4 YY  2007 1  C   CEO   z Feb 
5 YY  2007 1  D   CFO   z Feb 
6 YY  2007 2  C   CEO   a Jan 
7 YY  2007 2  D   CFO   a Jan 
8 ZZ  2008 3  F   CEO   b Dec 
9 ZZ  2008 3  G   CFO   b Dec 
+0

當我這樣做,我留下0行和所有列...如果我做外,然後所有行都添加兩次,一個只有信息股票,年,季度,exec_lname,jobposition,然後一次與股票,年,季度,eps,calldate ...與內在我根本沒有排。 – Julia

+0

嗯,當我們不能重現錯誤時,它很難提供幫助。它對你提供的數據工作正常 – Vaishali

0

就合併兩個數據幀,並指定「」部分中的變量名。

合併(DF,dfnew,通過= C( 「股票」, 「年」, 「季」),all.x = TRUE)

+1

Man,這是'R'' merge' – Wen

相關問題