块状聚合成箱,然后计算总和?

Fra*_*ser 3 python numpy python-3.x pandas

我有一个看起来像这样的矩阵:

M = [[1, 200],
 [1.8, 100],
 [2, 500],
 [2.5, 300],
 [3, 400],
 [3.5, 200],
 [5, 200],
 [8, 100]]
Run Code Online (Sandbox Code Playgroud)

我想按bin大小(适用于左列)对行进行分组,例如对于bin大小2(第一个bin是0-2的值,第二个bin是2-4的值,第三个bin是4-6的值,等等):

[[1, 200],
 [1.8, 100],
----
 [2, 500],
 [2.5, 300],
 [3, 400],
 [3.5, 200],
----
 [5, 200],
----
 [8, 100]]
Run Code Online (Sandbox Code Playgroud)

然后输出一个新的矩阵,其中包含每组右列的总和:

[200+100, 500+300+400+200, 200, 100]
Run Code Online (Sandbox Code Playgroud)

基于bin_size边界求和每个值的有效方法是什么?

ALo*_*llz 5

pandas

制作一个DataFrame,然后使用整数除法定义您的垃圾箱:

import pandas as pd

df = pd.DataFrame(M)
df.groupby(df[0]//2)[1].sum()

#0
#0.0     300
#1.0    1400
#2.0     200
#4.0     100
#Name: 1, dtype: int64
Run Code Online (Sandbox Code Playgroud)

使用.tolist()让您所需的输出:

df.groupby(df[0]//2)[1].sum().tolist()
#[300, 1400, 200, 100]
Run Code Online (Sandbox Code Playgroud)

numpy.bincount

import numpy as np

gp, vals = np.transpose(M)
gp = (gp//2).astype(int)

np.bincount(gp, vals)
#array([ 300., 1400.,  200.,    0.,  100.])
Run Code Online (Sandbox Code Playgroud)