pivot表数据结构

moiiocjp  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(572)

什么类型的数据结构(或数据结构?)可以用来存储可以访问数据的二维透视表?例如,我们从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++--任何语言都可以,我更感兴趣的是实际的数据结构。

xqkwcwgp

xqkwcwgp1#

我将以表格形式存储数据,即:

+---------------------------------------+
| Sector      | Device   | Year | Count |
+---------------------------------------+
| Electronics | Computer | 2018 |     1 |
| Electronics | Phone    | 2018 |     1 |
| Electronics | Phone    | 2019 |     1 |
+---------------------------------------+

pivot表只是表示上述数据的一种可视化方式。
可以使用列式表表示法(即按列而不是按行存储数据)优化表示法,以便快速查询。通常,您会按最常用的第一列对列进行排序,对每列上的数据进行排序,并存储位置以标记每一组不同值在列中的起始位置。
列表示包括apachearrow表示内存中的数据,apacheparquet表示磁盘上存储的数据。
对于上述数据,它可能类似于以下内容:

+-------------+
| Electronics |
| Electronics |
| Electronics |
+-------------+
| Computer    |
| Phone       |
| Phone       |
+-------------+
| 2018        |
| 2018        |
| 2019        |
+-------------+
| 1           |
| 1           |
| 1           |
+-------------+
3qpi33ja

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 ,这里是stackoverflow multi-index 有自己的标签。
也许可以查一下 boost::multi_index 示例:https://www.boost.org/doc/libs/1_62_0/libs/multi_index/doc/examples.html
java中的多索引:在某个地方是否有一个类似于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/

相关问题