У меня есть числовой вектор values
(серия в кадре данных панд df
).
idx values
0 NaN
1 1
2 2
3 NaN
4 NaN
5 33
6 34
7 90
8 NaN
9 5
10 NaN
11 22
12 70
13 NaN
14 672
15 10
16 73
17 9
18 NaN
19 15
И я построил логическую матрицу вида
array([[1, 1, 1, ..., 0, 0, 0],
[0, 1, 1, ..., 0, 0, 0],
[0, 0, 1, ..., 0, 0, 0],
...,
[0, 0, 0, ..., 1, 0, 0],
[0, 0, 0, ..., 1, 1, 0],
[0, 0, 0, ..., 1, 1, 1]])
Использование следующего кода, полученного из некоторого ответа на SO, который, к сожалению, больше не может быть найден.
n=len(df)
k=5
r= n-k+1
mat=np.tile([1]*k+[0]*r, r)[:-r].reshape(r,n)
mat
будет иметь форму (r,n)
, а df['values']
будет иметь форму (n,)
.
Как правильно заполнить mat
значениями df['values']
?
Учитывая предыдущий пример, мой ожидаемый результат будет:
array([[NaN, 1, 2, NaN, ..., 0, 0, 0],
[ 0, 1, 2,NaN,NaN, ..., 0, 0, 0],
[ 0, 0, 2,NaN,NaN,33, ..., 0, 0, 0],
...,
[0, 0, 0, ..., 672, 10, 73, 9, 0, 0],
[0, 0, 0, ..., 10,73, 9, NaN, 0],
[0, 0, 0, ..., 73, 9, NaN, 15]])
Есть предложения о том, как этого добиться?
Я попытался с точечным продуктом (надеясь, что он будет вести себя как в Matlab и повторить мой вектор r
раз, но не сработал.