繁体   English   中英

通过 ID 高效地将数据结构化为系列

[英]Efficiently structure data into series by ID

我正在查看一个非常大的结构化数据集,我想将其设为非结构化。 这是例子……

x1  x2  x3  day  id  
1   5   9   2    A
9   7   9   3    B
3   1   4   1    A
2   6   5   1    B
3   5   8   2    B
3   2   3   2    C

上面的行以随机顺序显示。 思考这个例子的另一种方式如下......

x = [[1, 5, 9, 2, “A”],
     [9, 7, 9, 3, “B”],
     [3, 1, 4, 1, “A”],
     [2, 6, 5, 1, “B”],
     [3, 5, 8, 2, “B”],
     [3, 2, 3, 2, “C”]]

处理后,所需的输出是……

[[[3, 1, 4, 1], [1, 5, 9, 2]],
 [[2, 6, 5, 1], [3, 5, 8, 2], [9, 7, 9, 3]],
 [[3, 2, 3, 2]]],
[[1, A], [1,B], [2,C]]

第一个列表包含 x 变量,第二个列表包含每个标识符的开始日期。

我知道如何实现这一点,但它是在 O(n^3) 中。 有没有更有效的方法,也许在 O(nlogn) 中?

编辑:虽然在我之前的帖子中提到过,但我已经更清楚地说明行是按随机顺序显示的。 我还删除了代码示例中的冗余列。

尝试:

x = [
    [3, 1, 4, 1, 1, "A"],
    [1, 5, 9, 2, 2, "A"],
    [2, 6, 5, 1, 1, "B"],
    [3, 5, 8, 2, 2, "B"],
    [9, 7, 9, 3, 3, "B"],
    [3, 2, 3, 2, 2, "C"],
]


out = {}
for row in x:
    out.setdefault(row[-1], []).append(row[:-1])

print(list(out.values()) + [[[v[0][-1], k] for k, v in out.items()]])

印刷:

[
    [[3, 1, 4, 1, 1], [1, 5, 9, 2, 2]],
    [[2, 6, 5, 1, 1], [3, 5, 8, 2, 2], [9, 7, 9, 3, 3]],
    [[3, 2, 3, 2, 2]],
    [[1, "A"], [1, "B"], [2, "C"]],
]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM