如何理解多索引系列的数据结构?

时间:2015-12-18 16:45:33

标签: python pandas

我正在阅读Wes Mckinney撰写的“Python for Data Analysis”一书。有一次,我们有这个:

by_tz_os = cframe.groupby(['tz', operating_system])
agg_counts = by_tz_os.size().unstack().fillna(0)

我试图通过以下方式理解 by_tz_os.size()系列的结构:

print 'Name is:', by_tz_os.size().name 
print 'Index is:', by_tz_os.size().index.name 
print by_tz_os.size()[:5]

结果如下:

Name is: None 
Index is: None 

tz                            
                  Not Windows     245
                  Windows         276
Africa/Cairo      Windows          3
Africa/Casablanca Windows          1
Africa/Ceuta      Windows          2
dtype: int64

这三个列(col1,col2,col3,让我们说)在系列上下文中是什么?我在想col1& col2是索引,但上述结果并非如此。我糊涂了。

1 个答案:

答案 0 :(得分:2)

解释了DataFrame.groupby().size()的结果here。相关部分:

  

另一个简单的聚合示例是计算每个的大小   组。这包含在GroupBy中作为size方法。它返回一个   索引为组名称且其值为大小的系列   每个小组。   

In [54]: grouped.size()
Out[54]: 
A    B    
bar  one      1
     three    1
     two      1
foo  one      2
     three    1
     two      2
dtype: int64

关于

print 'Name is:', by_tz_os.size().name
print 'Index is:', by_tz_os.size().index.name

产生

Name is: None 
Index is: None 

正如您已经提到的,by_tz_os.size()是一个系列。例如,与cframe["tz"]属性设置为&{34; tz"的name系列不同,by_tz_os.size()没有附加名称,大多数可能是由于没有明显的方法来命名groupby()结果一般。当然,这就是by_tz_os.size().name None为何的原因。

by_tz_os.size().index.name仅返回None,因为索引是MultiIndex。您应该使用names代替(顺便说一下,它适用于普通索引和MultiIndex)。