在groupby之后访问pandas中的分层列

时间:2014-06-12 08:01:33

标签: python pandas indexing group-by hierarchical-data

我使用pandas对数据集进行分组。当我汇总具有不同功能的不同列时,我得到了一个分层列结构。

G1 = df.groupby('date').agg({'col1': [sum, np.mean], 'col2': 'sum', 'col3': np.mean})

结果:

            col1               col2       col3
               sum      mean      sum       mean
date
2000-11-01    1701  1.384052    82336  54.222945
2000-11-02   11101  1.447894   761963  70.027260
2000-11-03   11285  1.479418   823355  77.984268

遗憾的是,我无法在文档中找到太多关于此结果的结构。我在pandas docs中找到的唯一的东西是分层多索引。

如何访问这些值? 目前我执行:X['col1']['mean']访问整个Series

2000-11-01   1.384052   
2000-11-02   1.447894  
2000-11-03   1.479418  

因此X['col1']['mean'][1]获取值1.447894,但我不知道其性能,因为此代码首先切片col1(X [' col1'])这导致一个视图/副本(在这种情况下为dunno)实际上包含2列,然后还有另一个mean - 列的切片。

任何提示? 我在哪里可以找到有关在文档中创建分层列的更多信息?

1 个答案:

答案 0 :(得分:5)

建议是一次性完成这些操作(不进行链接),这尤其允许您进行分配(而不是分配给视图并且修改是垃圾回收)。

将MultiIndex *列作为元组访问:

In [11]: df[('col1', 'mean')]
Out[11]:
date
2000-11-01    1.384052
2000-11-02    1.447894
2000-11-03    1.479418
Name: (col1, mean), dtype: float64

和使用loc的特定值:

In [12]: df.loc['2000-11-01', ('col1', 'mean')]
Out[12]: 1.3840520000000001

(要混合标签,位置和位置,iloc,你必须使用ix)

In [13]: df.ix[0, ('col1', 'mean')]
Out[13]: 1.3840520000000001

* 是一个MultiIndex。