熊猫字典的分层索引

时间:2020-05-15 09:53:16

标签: python pandas dataframe dictionary indexing

我有以下词典:

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'}

我已将此词典中的国家分类为(键)大陆(值)中。

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']})

我也有熊猫系列 Resetedset ['estimate']:

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

我想从此字典中创建一个层次结构索引,以大陆为层次结构的顶部,然后是国家/地区。

我尝试了以下操作:

totuple = dictionary.items()
index = pd.MultiIndex.from_tuples(index)
hierarchy = pop.reindex(index)

但是,这无效。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

创建元组列表并传递给MultiIndex.from_tuples

.xaml.cs

然后:

public MainWindow()
{
    InitializeComponent();

    var cities = new List<City>
    {
        new City() {CityName = "Mannheim"},
        new City() {CityName = "München"},
    };

    TvCities.ItemsSource = cities;
}

另一个想法是原始字典使用t = [(k, x) for k, v in dictionary.items() for x in v] index = pd.MultiIndex.from_tuples(t) print (index) MultiIndex([( 'Asia', 'China'), ( 'Asia', 'Japan'), ( 'Asia', 'India'), ( 'Asia', 'South Korea'), ( 'Asia', 'Iran'), ('North America', 'United States'), ('North America', 'Canada'), ( 'Europe', 'United Kingdom'), ( 'Europe', 'Russian Federation'), ( 'Europe', 'Germany'), ( 'Europe', 'France'), ( 'Europe', 'Italy'), ( 'Europe', 'Spain'), ( 'Australia', 'Australia'), ('South America', 'Brazil')], )

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