计算 Python 中二维列表中每个列表的滚动平均值
calculate rolling average of each list in 2d list in Python
我有一个 2d python 列表,我想绘制其移动平均线。因此,对于列表中的每个列表,我想分别计算移动平均线。我不确定如何在 Pandas df.
这样的列表上应用滚动
我首先将二维列表转换为数字
value_list = [pd.to_numeric(lst, errors='ignore') for lst in value_list]
我的输入是这样的
value_list = [[1,2,3,4,6,2,1,5,2,13,14],[4,5,6,12,32,42,75],[7,8,9,83,12,16]]
我想要的输出
value_list = [[1.5,2.5,3.5,5,4,1.5,3,3.5,7.5,13.5],[4.5,5.5,9,22,37,58.5],[7.5,8.5,46,47.5,14]]
在你的情况下,你似乎需要一个大小为 2 的切片 window,所以:
import numpy as np
[np.convolve(l, np.ones(2)/2, mode="valid") for l in value_list]
如果您需要其他 window 尺寸,您可以定义一个变量 w
和:
[np.convolve(l, np.ones(w)/w, mode="valid") for l in value_list]
如果不想使用 pandas 或 numpy 之类的库,您可以在列表理解中自行计算:
[[0.5*(a[i] + a[i+1]) for i in range(len(a)-1)] for a in value_list]
这里是 python.
中针对初学者的更简单明了的方法
import pandas as pd
def moving_average(numbers, window_size):
numbers_series = pd.Series(numbers)
windows = numbers_series.rolling(window_size)
moving_averages = windows.mean()
return moving_averages.tolist()[window_size - 1:]
# Press the green button in the gutter to run the script.
if __name__ == '__main__':
value_list = [[1, 2, 3, 4, 6, 2, 1, 5, 2, 13, 14], [4, 5, 6, 12, 32, 42, 75], [7, 8, 9, 83, 12, 16]]
output_list = []
for nums in value_list:
output_list.append(moving_average(nums, 2))
print(output_list)
要求的输出是:
[[1.5, 2.5, 3.5, 5.0, 4.0, 1.5, 3.0, 3.5, 7.5, 13.5], [4.5, 5.5, 9.0, 22.0, 37.0, 58.5], [7.5, 8.5, 46.0, 47.5, 14.0]]
我有一个 2d python 列表,我想绘制其移动平均线。因此,对于列表中的每个列表,我想分别计算移动平均线。我不确定如何在 Pandas df.
这样的列表上应用滚动我首先将二维列表转换为数字
value_list = [pd.to_numeric(lst, errors='ignore') for lst in value_list]
我的输入是这样的
value_list = [[1,2,3,4,6,2,1,5,2,13,14],[4,5,6,12,32,42,75],[7,8,9,83,12,16]]
我想要的输出
value_list = [[1.5,2.5,3.5,5,4,1.5,3,3.5,7.5,13.5],[4.5,5.5,9,22,37,58.5],[7.5,8.5,46,47.5,14]]
在你的情况下,你似乎需要一个大小为 2 的切片 window,所以:
import numpy as np
[np.convolve(l, np.ones(2)/2, mode="valid") for l in value_list]
如果您需要其他 window 尺寸,您可以定义一个变量 w
和:
[np.convolve(l, np.ones(w)/w, mode="valid") for l in value_list]
如果不想使用 pandas 或 numpy 之类的库,您可以在列表理解中自行计算:
[[0.5*(a[i] + a[i+1]) for i in range(len(a)-1)] for a in value_list]
这里是 python.
中针对初学者的更简单明了的方法import pandas as pd
def moving_average(numbers, window_size):
numbers_series = pd.Series(numbers)
windows = numbers_series.rolling(window_size)
moving_averages = windows.mean()
return moving_averages.tolist()[window_size - 1:]
# Press the green button in the gutter to run the script.
if __name__ == '__main__':
value_list = [[1, 2, 3, 4, 6, 2, 1, 5, 2, 13, 14], [4, 5, 6, 12, 32, 42, 75], [7, 8, 9, 83, 12, 16]]
output_list = []
for nums in value_list:
output_list.append(moving_average(nums, 2))
print(output_list)
要求的输出是:
[[1.5, 2.5, 3.5, 5.0, 4.0, 1.5, 3.0, 3.5, 7.5, 13.5], [4.5, 5.5, 9.0, 22.0, 37.0, 58.5], [7.5, 8.5, 46.0, 47.5, 14.0]]