Как получить среднее значение двух гистограмм - PullRequest
0 голосов
/ 27 февраля 2019

Просто интересно, есть ли простой способ получить «среднее» гистограмм.Например, у меня есть два списка:

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

Если я нанесу a и b с помощью plt.hist (), у меня будут гистограммы с осью х от 1 до 10 и осью у, чтобы считатьчисел.

Теперь я хочу получить среднее значение 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, который не должен использовать цикл

1 Ответ

0 голосов
/ 27 февраля 2019

Как насчет использования функции 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...