#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)