我尝试在三列上匹配两个数据框,即" 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?问题不在于合并多个密钥 - 问题可能是在第一个数据框中我总是有两行具有相同的股票代码/年/季度组合。
我希望有人可以帮助我! 谢谢! 朱莉娅
答案 0 :(得分:0)
使用合并默认参数how ='inner'
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
答案 1 :(得分:0)
只需合并两个数据框,并在" 中"指定变量名称。部分。
合并(df,dfnew,by = c(" ticker"," year"," quarter"),all.x = TRUE)