2017-10-18 65 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

相关问题