Python 熊猫词典的层次索引
我有以下字典:Python 熊猫词典的层次索引,python,pandas,dataframe,dictionary,indexing,Python,Pandas,Dataframe,Dictionary,Indexing,我有以下字典: ContinentDict = {'China':'Asia', 'United States':'North America', 'Japan':'Asia', 'United Kingdom':'Europe', 'Russian Federation':'Europe', 'Canad
ContinentDict = {'China':'Asia',
'United States':'North America',
'Japan':'Asia',
'United Kingdom':'Europe',
'Russian Federation':'Europe',
'Canada':'North America',
'Germany':'Europe',
'India':'Asia',
'France':'Europe',
'South Korea':'Asia',
'Italy':'Europe',
'Spain':'Europe',
'Iran':'Asia',
'Australia':'Australia',
'Brazil':'South America'}
Country
China 1.36765e+09
United States 3.17615e+08
Japan 1.27409e+08
United Kingdom 6.3871e+07
Russian Federation 1.435e+08
Canada 3.52399e+07
Germany 8.03697e+07
India 1.27673e+09
France 6.38373e+07
South Korea 4.98054e+07
Italy 5.99083e+07
Spain 4.64434e+07
Iran 7.70756e+07
Australia 2.3316e+07
Brazil 2.05915e+08
Name: estimate, dtype: object
我已经将这本词典中的国家(键)分为大陆(值)
from collections import defaultdict
dictionary = defaultdict(list)
for key, value in ContinentDict.items():
dictionary[value].append(key)
这给了我:
dictionary
defaultdict(<class 'list'>, {'Asia': ['China', 'Japan', 'India', 'South Korea', 'Iran'], 'North America': ['United States', 'Canada'], 'Europe': ['United Kingdom', 'Russian Federation', 'Germany', 'France', 'Italy', 'Spain'], 'Australia': ['Australia'], 'South America': ['Brazil']})
我想从这本词典中创建一个等级索引,以大陆为最高等级,其次是国家
我尝试了以下方法:
totuple = dictionary.items()
index = pd.MultiIndex.from_tuples(index)
hierarchy = pop.reindex(index)
但是,这没有起作用。
有谁能帮我一把吗?创建元组列表并传递给: 然后:
Reducedset = Reducedset.reindex(index, level=1)
print (Reducedset)
estimate
Asia China 1.367650e+09
Japan 1.274090e+08
India 1.276730e+09
South Korea 4.980540e+07
Iran 7.707560e+07
North America United States 3.176150e+08
Canada 3.523990e+07
Europe United Kingdom 6.387100e+07
Russian Federation 1.435000e+08
Germany 8.036970e+07
France 6.383730e+07
Italy 5.990830e+07
Spain 4.644340e+07
Australia Australia 2.331600e+07
South America Brazil 2.059150e+08
另一个想法是使用原始词典的map
:
ContinentDict = {'China':'Asia',
'United States':'North America',
'Japan':'Asia',
'United Kingdom':'Europe',
'Russian Federation':'Europe',
'Canada':'North America',
'Germany':'Europe',
'India':'Asia',
'France':'Europe',
'South Korea':'Asia',
'Italy':'Europe',
'Spain':'Europe',
'Iran':'Asia',
'Australia':'Australia',
'Brazil':'South America'}
d = {'estimate': {'China': 1367650000.0, 'United States': 317615000.0, 'Japan': 127409000.0, 'United Kingdom': 63871000.0, 'Russian Federation': 143500000.0, 'Canada': 35239900.0, 'Germany': 80369700.0, 'India': 1276730000.0, 'France': 63837300.0, 'South Korea': 49805400.0, 'Italy': 59908300.0, 'Spain': 46443400.0, 'Iran': 77075600.0, 'Australia': 23316000.0, 'Brazil': 205915000.0}}
Reducedset = pd.DataFrame(d)
当我尝试:Reducedset=Reducedset.reindex(index,level=1)时,这给了我一个错误:两个多索引对象之间的级别连接是不明确的。为什么会这样?@Caledonian26-我想你们先运行第一个解决方案,然后运行最后一段解决方案,但最后一个解决方案是第一个解决方案的替代方案。所以,使用第一个或第二个解决方案。最后一个解决方案不会按大陆对内部索引进行分组,我如何才能做到这一点?当我单独运行第一个解决方案时,我仍然收到错误消息:两个多索引对象之间的级别连接不明确。@Caledonin26-然后使用
df=df.sort\u index()
作为最后一个解决方案。实际上,当我这样做时,第一个解决方案工作:Reducedset=Reducedset.reindex(index)
ContinentDict = {'China':'Asia',
'United States':'North America',
'Japan':'Asia',
'United Kingdom':'Europe',
'Russian Federation':'Europe',
'Canada':'North America',
'Germany':'Europe',
'India':'Asia',
'France':'Europe',
'South Korea':'Asia',
'Italy':'Europe',
'Spain':'Europe',
'Iran':'Asia',
'Australia':'Australia',
'Brazil':'South America'}
d = {'estimate': {'China': 1367650000.0, 'United States': 317615000.0, 'Japan': 127409000.0, 'United Kingdom': 63871000.0, 'Russian Federation': 143500000.0, 'Canada': 35239900.0, 'Germany': 80369700.0, 'India': 1276730000.0, 'France': 63837300.0, 'South Korea': 49805400.0, 'Italy': 59908300.0, 'Spain': 46443400.0, 'Iran': 77075600.0, 'Australia': 23316000.0, 'Brazil': 205915000.0}}
Reducedset = pd.DataFrame(d)
idx = Reducedset.index.map(ContinentDict)
Reducedset.index = [idx, Reducedset.index]
Reducedset = Reducedset.sort_index()
print (Reducedset)
estimate
Asia China 1.367650e+09
India 1.276730e+09
Iran 7.707560e+07
Japan 1.274090e+08
South Korea 4.980540e+07
Australia Australia 2.331600e+07
Europe France 6.383730e+07
Germany 8.036970e+07
Italy 5.990830e+07
Russian Federation 1.435000e+08
Spain 4.644340e+07
United Kingdom 6.387100e+07
North America Canada 3.523990e+07
United States 3.176150e+08
South America Brazil 2.059150e+08