2017-05-12 3 views
2

Ich habe 3 DFs: BIP, Energie, ScimEn.verschmelzen 3 Datenrahmen mit verschiedenen Indizes

print(GDP.index.name) > Country 
print(energy.index.name) > None 
print(ScimEn.index.name) > None 

Obwohl Energie und ScimEn eine Spalte "Land" haben. Ich möchte alle DFs auf 'Land' zusammenführen. Wie kann ich das machen? Ich habe versucht, die folgenden

newdf = (pd.merge(energy, ScimEn, how='inner', on='Country').merge(GDP, how='inner', on=GDP.index.name)) 
> KeyError: 'Country' 

zu tun Wenn ich versuche:

newdf = (pd.merge(energy, ScimEn, how='inner', on='Country'). 
     merge(GDP, how='inner', left_index=True)) 
    raise MergeError('Must pass right_on or right_index=True') 
pandas.tools.merge.MergeError: Must pass right_on or right_index=True 

Wenn ich versuche:

newdf = (pd.merge(energy, ScimEn, how='inner', on='Country'). 
     merge(GDP, how='inner', left_index=True, right_index=True)) 

Es gibt:

Empty DataFrame 
Columns: [Country, Energy Supply, Energy Supply per Capita, % Renewable, Rank, Documents, Citable documents, Citations, Self-citations, Citations per document, H index, Country Code, Indicator Name, Indicator Code, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015] 
Index: [] 
+0

vielleicht ändern müssen 'auf = GDP.index.name' zu' left_index = true' – jezrael

+0

Ich postete Ergebnisse zu meinem ursprünglichen Beitrag – feedthemachine

+1

Danke, was ist 'newdf = (pd.merge (Energie, ScimEn, on = 'Land'). Merge (GDP.reset _index(), on = "Land"))? – jezrael

Antwort

1

Sie können reset_index hinzufügen zu GDP:

newdf = pd.merge(energy.reset_index(), ScimEn, on='Country').merge(GDP.reset_index(), on='Country') 

Alternative, wenn viele DataFrames:

from functools import reduce 
dfs = [energy.reset_index(), ScimEn, GDP.reset_index()] 
newdf = reduce(lambda left,right: pd.merge(left,right,on='Country'), dfs) 

Lösung ohne reset_index mit join:

newdf = pd.merge(energy.reset_index(), ScimEn, on='Country').join(GDP, on='Country', how='inner') 
+0

Ja, sicher. Prüfen Sie. – jezrael

Verwandte Themen