为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas 按值范围对二维 NumPy 数据进行分组

Pandas 按值范围对二维 NumPy 数据进行分组

慕姐4208626 2022-03-09 20:13:50
    我有一个二维数组形式的大型数据集。二维数组表示连续的强度数据,我想用它来创建另一个相同大小的二维数组,只是这一次,这些值被分组为离散值。换句话说,如果我有一个像这样的二维数组,[(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 列。
查看完整描述

1 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

您需要stack数据框具有一维表示,然后应用cut. 之后你就可以unstack了。


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

或(使用@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)]


查看完整回答
反对 回复 2022-03-09
  • 1 回答
  • 0 关注
  • 344 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信