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边界求和每个值的有效方法是什么?
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.bincountimport 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)