tim*_*tim 4 python indexing group-by hierarchical-data pandas
我使用pandas来分组数据集.当我使用不同的函数聚合不同的列时,我得到了一个分层的列结构.
G1 = df.groupby('date').agg({'col1': [sum, np.mean], 'col2': 'sum', 'col3': np.mean})
Run Code Online (Sandbox Code Playgroud)
结果是:
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
Run Code Online (Sandbox Code Playgroud)
不幸的是,我在文档中找不到太多关于这个结果的结构.我在pandas docs中找到的唯一的东西是分层多索引.
我如何访问这些值?目前我做:X['col1']['mean']访问整个Series
2000-11-01 1.384052
2000-11-02 1.447894
2000-11-03 1.479418
Run Code Online (Sandbox Code Playgroud)
因此X['col1']['mean'][1]获取值1.447894,但我想知道性能,因为这段代码首先切片col1(X ['col1'])导致一个视图/副本(dunno,在这种情况下哪一个)实际包含2列,然后是另一个片段mean.
有小费吗?我在哪里可以找到有关在文档中创建分层列的更多信息?
建议是一次性完成这些(没有链接),这特别允许你做任务(而不是分配给视图和修改被垃圾收集).
访问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
Run Code Online (Sandbox Code Playgroud)
和使用loc的特定值:
In [12]: df.loc['2000-11-01', ('col1', 'mean')]
Out[12]: 1.3840520000000001
Run Code Online (Sandbox Code Playgroud)
(要混合标签,位置和位置,iloc,你必须使用ix)
In [13]: df.ix[0, ('col1', 'mean')]
Out[13]: 1.3840520000000001
Run Code Online (Sandbox Code Playgroud)
*这是一个MultiIndex.