2017-07-20 111 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