如何求两个直方图的平均值

2024-05-03 08:46:14 发布

您现在位置:Python中文网/ 问答频道 /正文

只是想知道是否有一个简单的方法来获得直方图的“平均值”。 例如,我有两个列表:

a=[1,2,3,5,6,7]
b=[1,2,3,10]

如果我用plt.hist()绘制a和b,我将得到x轴为1到10,y轴为数字计数的直方图

现在我想得到a和b的平均值

array([ 1. ,  1. ,  1. ,  0. ,  0.5,  0.5,  0.5,  0. ,  0. ,  0.5])

就像把两个直方图相加,得到y轴的平均值,x轴仍然是1到10

我知道我可以通过循环列表得到这个平均数组

d=np.zeros(10)
for i in range(len(a)):
    d[a[i]-1]+=1
for i in range(len(b)):
    d[b[i]-1]+=1
d=d/2

但是想知道是否有一种更简单的方法,比如(a+b)/2,不需要使用循环


Tags: 方法in列表forlen绘制rangeplt
1条回答
网友
1楼 · 发布于 2024-05-03 08:46:14

使用pandasgroupby函数怎么样

a=[1,2,3,5,6,7]
b=[1,2,3,10]

a_b = a+b
#if you don't need 0 data, comment the below code.
c = list(range(min(a_b), max(a_b)))

import pandas as pd

d = {'A':(a_b+c), 'B':[1]*len(a_b)+[0]*len(c)}
#if you don't need 0 data, use the below commented code instead of the above code.
#d = {'A':(a_b), 'B':[1]*len(a_b)} 
df = pd.DataFrame(data=d)
df_g = df.groupby('A').sum()

print( list( (df_g/df_g.max())['B'] ) )    

结果:

[1.0, 1.0, 1.0, 0.0, 0.5, 0.5, 0.5, 0.0, 0.0, 0.5]

相关问题 更多 >