Как использовать pandas.rolling(). Mean для входного массива 3D?
Для 1D я могу использовать:
a=np.array([1,2,3,4])
b=pandas.Series(a).rolling(window=3,center=True).mean()
Но проблема в том, если у меня есть массив a
в 3D то использование этого метода дает ошибку
Exception: Data must be 1-dimensional
Код, который я использовал:
t[:,:,0]=(pd.Series(imgg[:,:,0:4]).rolling(window=[1,1,3],center=True).mean())
Вот imgg
это 3D массив NumPy.
Что еще я попробовал:
Я тоже пробовал старую функцию rolling_mean
т.е. pd.rolling_mean(a,4,center=True)
, но он тоже не работает, выдает ошибку:
AssertionError: cannot support ndim > 2 for ndarray compat
1 ответ
Хорошо, надеюсь, это то, что вам нужно.
Я думаю, что вы можете сначала попытаться разделить массивы, вместо того, чтобы пытаться работать с 3-мерным массивом - поскольку мы знаем, что он работает на 1D.
import pandas as pd
imgg = [(1,2,1),(2,3,3),(4,1,2),(5,3,2),(6,2,1),(2,3,4),(5,6,2)]
>>>imgg
0 1 2
0 1 2 1
1 2 3 3
2 4 1 2
3 5 3 2
4 6 2 1
5 2 3 4
6 5 6 2
x = []
y = []
d = []
# Split into components
for img in imgg:
x.append(img[0])
y.append(img[1])
d.append(img[2])
# Compute rolling mean
dm = pd.Series(d).rolling(window=3,center=True).mean()
# Stitch them back to form your desired dataframe
data = [k for k in zip(x,y,dm)]
df = pd.DataFrame(data)
>>>df
0 1 2
0 1 2 NaN
1 2 3 2.000000
2 4 1 2.333333
3 5 3 1.666667
4 6 2 2.333333
5 2 3 2.333333
6 5 6 NaN