2017-07-20 62 views
2

我试图合并2个不同大小的数据帧,两者都是由'国家'索引。第一个数据框'GDP_EN'包含世界上的每个国家,第二个数据框'ScimEn'包含15个国家。熊猫合并失败提取常见的索引值

当我尝试合并这些数据框时,我没有合并基于ScimEn的索引国家的列,而是收回了'Country_x'和'Country_y'。 “Country_x”来自GDP_EN,这是按字母顺序排列的前15个国家。 'Country_y'是ScimEn的15个国家。我想知道他们为什么不合并?

我用:

DF=pd.merge(GDP_EN,ScimEn,left_index=True,right_index=True,how='right') 
+0

你可以试试DF = pd.merge(GDP_EN,ScimEn,on =“Country”,how ='right')如果“国家”在这两个数据框中的列名相同? – Gayatri

+0

仍然是相同的结果.. – Tokaalmighty

+0

你可以把你的问题的数据框?这将很容易调试。 – Gayatri

回答

1

我认为无论DataFrames不是指数由Country,但Country是列添加参数on='Country'

GDP_EN = pd.DataFrame({'Country':['USA','France','Slovakia', 'Russia'], 
         'a':[4,8,6,9]}) 
print (GDP_EN) 
    Country a 
0  USA 4 
1 France 8 
2 Slovakia 6 
3 Russia 9 

ScimEn = pd.DataFrame({'Country':['France','Slovakia'], 
         'b':[80,70]}) 
print (ScimEn) 
    Country b 
0 France 80 
1 Slovakia 70 

DF=pd.merge(GDP_EN,ScimEn,left_index=True,right_index=True,how='right') 
print (DF) 
    Country_x a Country_y b 
0  USA 4 France 80 
1 France 8 Slovakia 70 

DF=pd.merge(GDP_EN,ScimEn,on='Country',how='right') 
print (DF) 
    Country a b 
0 France 8 80 
1 Slovakia 6 70 

如果Country是索引它完美的作品:

GDP_EN = pd.DataFrame({'Country':['USA','France','Slovakia', 'Russia'], 
         'a':[4,8,6,9]}).set_index('Country') 
print (GDP_EN) 
      a 
Country  
USA  4 
France 8 
Slovakia 6 
Russia 9 

print (GDP_EN.index) 
Index(['USA', 'France', 'Slovakia', 'Russia'], dtype='object', name='Country') 

ScimEn = pd.DataFrame({'Country':['France','Slovakia'], 
         'b':[80,70]}).set_index('Country') 
print (ScimEn) 
      b 
Country  
France 80 
Slovakia 70 

print (ScimEn.index) 
Index(['France', 'Slovakia'], dtype='object', name='Country') 

DF=pd.merge(GDP_EN,ScimEn,left_index=True,right_index=True,how='right') 
print (DF) 
      a b 
Country   
France 8 80 
Slovakia 6 70