У меня есть массив значений (упрощенный из гораздо большего набора данных):
data =
array([[2, 1, 3, 4,]
[2, 1, 4, 5,]
[2, 1, 5, 6,]
[2, 1, 6, 7,]
[2, 1, 7, 8,]
[2, 1, 8, 9,]
[2, 1, 9, 10]])
Который я хочу превратить в эти значения:
output =
np.array([[1.2, 0., 2.4, 3.6]
[1.2, 0., 3.6, 4.8]
[1.2, 0., 4.8, 6. ]
[1.2, 0., 6., 7.2]
[1.2, 0., 7.2, 8.4]
[1.2, 0., 8.4, 9. ]
[1.2, 0., 9., 9.6]])
У меня есть массив поиска, который я собирался использовать, но не смог понять, как его использовать:
lookup =
array([[ 1. , 0. ]
[ 2. , 1.2]
[ 3. , 2.4]
[ 4. , 3.6]
[ 5. , 4.8]
[ 6. , 6. ]
[ 7. , 7.2]
[ 8. , 8.4]
[ 9. , 9. ]
[ 10., 9.6]])
Я не смог найти способ сделать это, используя массивы numpy, поэтому я превратил данные в фрейм данных Pandas:
df = pd.DataFrame(data[:, :], columns=('A', 'B', 'M', 'N'))
df
Out[125]:
A B M N
0 2 1 3 4
1 2 1 4 5
2 2 1 5 6
3 2 1 6 7
4 2 1 7 8
5 2 1 8 9
6 2 1 9 10
И попытался преобразовать значения, используя словарь:
di = {1: 0., 2: 1.2, 3: 2.4, 4: 3.6, 5: 4.8, 6: 6., 7: 7.2, 8: 8.4, 9: 9., 10: 9.6}
df.replace({'A': di})
Traceback (most recent call last):
File "<ipython-input-124-6a329a5fa829>", line 1, in <module>
df.replace({'A': di})
File "C:\Users\russells\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\generic.py", line 4521, in replace
raise ValueError("Replacement not allowed with "
ValueError: Replacement not allowed with overlapping keys and values
Это, очевидно, не сработало, но также кажется действительно неуклюжим, ужасным способом решения проблемы. Должен быть способ поиска массива поиска, а не написание словаря. У кого-нибудь есть указатели?