在Python中使用pandas cut,groupby和multiindex的奇怪行为

时间:2017-10-09 16:27:02

标签: python pandas

我有一个像这样的数据框,

                        Continent % Renewable
Country                                      
China                        Asia           2
United States       North America           1
Japan                        Asia           1
United Kingdom             Europe           1
Russian Federation         Europe           2
Canada              North America           5
Germany                    Europe           2
India                        Asia           1
France                     Europe           2
South Korea                  Asia           1
Italy                      Europe           3
Spain                      Europe           3
Iran                         Asia           1
Australia               Australia           1
Brazil              South America           5

其中% Renewable是使用剪切函数创建的列,

Top15['% Renewable'] = pd.cut(Top15['% Renewable'], 5, labels=range(1,6))

当我按Continent% Renewable分组来计算我所执行的每个子集中的国家/地区数量时,

count_groups = Top15.groupby(['Continent', '% Renewable']).size()

是,

Continent      % Renewable
Asia           1              4
               2              1
Australia      1              1
Europe         1              1
               2              3
               3              2
North America  1              1
               5              1
South America  5              1

奇怪的是现在是索引,如果我索引类别值为>的值。 0这给了我值,

count_groups.loc['Asia', 1]
>> 4

如果没有,

count_groups.loc['Asia', 3]
>> IndexingError: Too many indexers

不应该给我0,因为该类别中没有条目吗?我认为这个数据框是使用groupby创建的。

如果没有,任何人都可以建议一个程序,这样我可以保留0个国家/地区的% Renewable类别吗?

1 个答案:

答案 0 :(得分:2)

你有一个MultiIndex系列。通常,我们使用元组来使用MultiIndexes进行索引,但是pandas可以灵活地进行索引。

在我看来,count_groups.loc[('Asia', 3)]应该引发一个KeyError,因为这一对没有出现在索引中,但这是让熊猫开发人员决定我猜的。

要从系列中返回默认值,我们可以像在字典中一样使用get

count_groups.get(('Asia', 3), 0) 

如果密钥不存在,则返回0。