什么类型的数据结构(或数据结构?)可以用来存储可以访问数据的二维透视表?例如,我们从excel复制以下内容:
如果数据都在一维层次结构中--也就是说,它变成了组>产品>年份>价值,我们可以按照以下思路做一些事情:
{
"Electronics": {
"(all)": {
"Year": {
"2018": 2,
"2019": 1,
"Grand Total": 3
}
},
"Computer": {
"Year": {
"2018": 1,
"2019": 0,
"Grand Total": 1
}
},
"Phone": {
"Year": {
"2018": 1,
"2019": 1,
"Grand Total": 2
}
}
}
}
然后我可以通过以下操作在electronics>computer>2018访问值:
obj["Electronics"]['Computer']['Year']
// {2018: 1, 2019: 0, Grand Total: 1}
obj["Electronics"]['Computer']['Year'][2018]
// 1
但我想不出如何将其放入二维多维数组之外的二维数据结构中,而二维多维数组除了能够在某个位置检索值之外,没有任何其他用途(我需要存储大量元数据才能知道在哪个位置存储了什么)。
什么是合适的数据结构?我已经标记了java,c,c++--任何语言都可以,我更感兴趣的是实际的数据结构。
2条答案
按热度按时间xqkwcwgp1#
我将以表格形式存储数据,即:
pivot表只是表示上述数据的一种可视化方式。
可以使用列式表表示法(即按列而不是按行存储数据)优化表示法,以便快速查询。通常,您会按最常用的第一列对列进行排序,对每列上的数据进行排序,并存储位置以标记每一组不同值在列中的起始位置。
列表示包括apachearrow表示内存中的数据,apacheparquet表示磁盘上存储的数据。
对于上述数据,它可能类似于以下内容:
3qpi33ja2#
在python中,层次索引用于实现透视表。例如,在python中,数据透视表是多索引Dataframe。Dataframe的实现在https://github.com/pandas-dev/pandas/blob/v0.22.0/pandas/core/frame.py#l236-l6142号。
MultiIndex
在中实现pandas.core.indexes.multi.py
(https://github.com/pandas-dev/pandas/blob/8dbb593d0c94107ec8b91a4723c40af537807ca4/pandas/core/indexes/multi.py#l179)对于c++和java,还有层次索引库,即。
boost::multi_index
,这里是stackoverflowmulti-index
有自己的标签。也许可以查一下
boost::multi_index
示例:https://www.boost.org/doc/libs/1_62_0/libs/multi_index/doc/examples.htmljava中的多索引:在某个地方是否有一个类似于boost::multi\u index for java的索引?
在https://www.scss.tcd.ie/owen.conlan/4d2/4d2-9&10_multi-level_indexes_v1.02.pdf, https://www.cs.uct.ac.za/mit_notes/database/htmls/chp11.html#multilevel-索引和http://theteacher.info/index.php/architecture-data-comms-and-applications-unit-5/4-organisation-and-structure-of-data/all-topics/3940-multi-level-indexes 分析了文件中的多索引(文件系统结构)和搜索算法
python中用于处理多级索引的命令是。
stack
以及unstack
:https://nikgrozev.com/2015/07/01/reshaping-in-pandas-pivot-pivot-table-stack-and-unstack-explained-with-pictures/, https://www.xplenty.com/glossary/what-is-hierarchical-indexing/