只是想知道是否有一种简单的方法来获取直方图的“平均值”。 例如,我有两个列表:
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
答案 0 :(得分:0)
如何使用pandas
groupby
函数?
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]