gpt4 book ai didi

python - 创建数据透视表

转载 作者:太空狗 更新时间:2023-10-30 01:55:00 25 4
gpt4 key购买 nike

我正在尝试从 python 中的 Numpy 数组创建数据透视表。我做了很多研究,但找不到直接的解决方案。我知道你可以用 Pandas 做到这一点,但我在安装它时遇到了问题 - 但必须有一种方法可以在没有 Pandas 的情况下做到这一点。我的 Numpy 数组是

[[ 4057     8  1374]
[ 4057 9 759]
[ 4057 11 96]
...,
[89205 16 146]
[89205 17 154]
[89205 18 244]]

我需要一个数据透视表,其中行是第一列,列是第二列,值是第三列。请帮忙!

谢谢

最佳答案

我想这就是你想要的:

data = np.array([[ 4057,     8,  1374],
[ 4057, 9, 759],
[ 4057, 11, 96],
[89205, 16, 146],
[89205, 17, 154],
[89205, 18, 244]])

rows, row_pos = np.unique(data[:, 0], return_inverse=True)
cols, col_pos = np.unique(data[:, 1], return_inverse=True)

pivot_table = np.zeros((len(rows), len(cols)), dtype=data.dtype)
pivot_table[row_pos, col_pos] = data[:, 2]

>>> pivot_table
array([[1374, 759, 96, 0, 0, 0],
[ 0, 0, 0, 146, 154, 244]])
>>> rows
array([ 4057, 89205])
>>> cols
array([ 8, 9, 11, 16, 17, 18])

这种方法有一些限制,主要是,如果您对同一行/列组合重复输入,则不会将它们加在一起,而只会保留一个(可能是最后一个)。如果你想把它们加在一起,虽然有点复杂,你可以滥用 scipy 的稀疏模块:

data = np.array([[ 4057,     8,  1374],
[ 4057, 9, 759],
[ 4057, 11, 96],
[89205, 16, 146],
[89205, 17, 154],
[89205, 18, 244],
[ 4057, 11, 4]])

rows, row_pos = np.unique(data[:, 0], return_inverse=True)
cols, col_pos = np.unique(data[:, 1], return_inverse=True)

pivot_table = np.zeros((len(rows), len(cols)), dtype=data.dtype)
pivot_table[row_pos, col_pos] = data[:, 2]
>>> pivot_table # the element at [0, 2] should be 100!!!
array([[1374, 759, 4, 0, 0, 0],
[ 0, 0, 0, 146, 154, 244]])

import scipy.sparse as sps
pivot_table = sps.coo_matrix((data[:, 2], (row_pos, col_pos)),
shape=(len(rows), len(cols))).A
>>> pivot_table # now repeated elements are added together
array([[1374, 759, 100, 0, 0, 0],
[ 0, 0, 0, 146, 154, 244]])

关于python - 创建数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17028329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com