python - Pandas Group 2-D NumPy 数据(按值范围)

标签 python pandas grouping

我有一个二维数组形式的大型数据集。 2D 数组表示连续强度数据,我想用它来创建另一个相同大小的 2D 数组,只是这一次,这些值被分组为离散值。换句话说,如果我有一个像这样的二维数组,

[(11, 23, 33, 12),
 (21, 31, 13, 19),
 (33, 22, 26, 31)]

输出如下所示,其中 10 到 19 的值分配给 1,20 到 29 的值分配给 2,30 到 39 的值分配给 3。

[(1, 2, 3, 1),
 (2, 3, 1, 1),
 (3, 2, 2, 3)]

更理想的是,我想根据百分位数进行这些分配。例如,前 10% 的值分配为 5,前 20% 的值分配为 4,依此类推。

我的数据集采用 NumPy 格式。我已经查看了函数groupby,但这似乎不允许我指定范围。我也看过 cut 但 cut 仅适用于一维数组。我考虑过在遍历每一行数据时通过循环运行 cut 函数,但我担心这可能会花费太多时间。我的矩阵可能有 4000 行 x 4000 列那么大。

最佳答案

您需要堆叠数据帧以获得一维表示,然后应用剪切。之后您可以取消堆叠它。

[tuple(x) for x in (pd.cut(pd.DataFrame(a).stack(), bins=[10,20,30,40], labels=False)+1).unstack().values]

OR(使用 @user3483203 的魔法)

[tuple(x) for x in np.searchsorted([10, 20, 30, 40], np.array(a))]

输出:

[(1, 2, 3, 1), 
 (2, 3, 1, 1), 
 (3, 2, 2, 3)]

关于python - Pandas Group 2-D NumPy 数据(按值范围),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56673955/

相关文章:

python - 错误通用详细 View 必须使用对象 pk 或 slug 调用,即使使用 pk

python - 使用 delim_whitespace、read_csv 指定最大分隔符

javascript - 将 JS 数组中的相同元素分组,但仅当连续时

r - 有什么方法可以在summaryBy中为不同的功能指定不同的NA Action ?

php - 对 PHP 数组编号进行分组

python - 无法导入 pymongo ubuntu

Python:索引子字符串中的位置

python - 如何将打印语句重定向到 Tkinter 文本小部件

python - 如何使用 python-pandas 读取列数不均匀的文本文件?

python - 当我一次取消堆叠多个级别时,如何填充 na 值