python - 创建一个数据透视表

use*_*354 4 python numpy pivot-table

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

[[ 4057     8  1374]
 [ 4057     9   759]
 [ 4057    11    96]
 ..., 
 [89205    16   146]
 [89205    17   154]
 [89205    18   244]]
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Jai*_*ime 11

我想这就是你想要的:

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])
Run Code Online (Sandbox Code Playgroud)

这种方法有一些限制,主要是,如果您有相同行/列组合的重复条目,它们将不会被添加在一起,但只保留一个(可能是最后一个).如果你想将它们全部加在一起,虽然有点复杂,你可以滥用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]])
Run Code Online (Sandbox Code Playgroud)

  • 我迟到了,但 2022 年要做的事情就是将数据放入 pandas 数据框中并调用数据透视方法:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.pivot .html (2认同)