Вычислить среднее значение для нескольких списков разной длины

#python #pandas #numpy #math #plot

#python #pandas #numpy #математика #график

Вопрос:

Предположим, у меня есть следующие списки (может быть более трех списков):

 l1 = [4,5,10,20,13]
l2 = [3,7,11]
l3 = [10,40,50,60]
  

как я могу вычислить среднее значение для элементов для этих списков следующим образом, учитывая, что они имеют разную длину?

 avg = [(4 3 10)/3, (5 7 40)/3, (10 11 50)/3, (20 ? 60)/3, (13 ? ?)/3 ] 
  

Среднее значение может быть использовано для построения среднего значения этих списков.
Одна из идей состоит в том, чтобы сократить все до длины кратчайшего списка, но должен быть лучший способ.

Спасибо.

Комментарии:

1. Вы можете просто сделать means = [sum(lst) / len(lst) for lst in (l1, l2, l3)]

Ответ №1:

В чистом Python это задание для itertools.zip_longest :

 def column_wise_sum(rows):
    columns = zip_longest(*rows, fillvalue=0)
    return [sum(col)/len(rows) for col in columns]                                      
  

Пошаговый:

 In [15]: rows = [ 
    ...:     [1, 2, 3, 4], 
    ...:     [2, 4], 
    ...:     [3, 3, 3] 
    ...: ]                                                                                 

In [16]: list(zip_longest(*rows, fillvalue=0))                                                
Out[16]: [(1, 2, 3), (2, 4, 3), (3, 0, 3), (4, 0, 0)]

In [17]: [sum(column)/len(rows) for column in zip_longest(*rows, fillvalue=0)]                   
Out[17]: [2.0, 3.0, 2.0, 1.3333333333333333]
  

Ответ №2:

Если у вас есть все ваши списки в одном большом списке списков, одним из решений будет:

 l1 = [4,5,10,20,13]
l2 = [3,7,11]
l3 = [10,40,50,60]

ls = [l1, l2, l3]

pd.DataFrame(ls).mean(axis = 1)