Если вы работаете с базовыми массивами вашего фрейма данных, вещание позаботится о вас за вас:
(all_data.values - mu)/sigma
И поместите его обратно в фрейм данных с теми же столбцами / индексом, что и all_data
:
pd.DataFrame((all_data.values - mu)/sigma, columns=all_data.columns, index=all_data.index)
Пример :
На этом мини-фрейме данных:
all_data = pd.DataFrame(np.random.randint(0,9,(5,5)))
>>> all_data
0 1 2 3 4
0 5 7 1 8 6
1 5 8 0 3 0
2 8 2 0 1 6
3 5 8 7 7 0
4 4 6 0 2 5
С:
mu = np.array([all_data.mean(0)])
sigma = np.array([np.std(all_data,axis=0)])
>>> mu
array([[5.6, 2. , 4. , 4.4, 7.6]])
>>> sigma
array([[1.62480768, 1.26491106, 3.40587727, 2.41660919, 0.48989795]])
Вы можете получить:
>>> pd.DataFrame((all_data.values - mu)/sigma, columns=all_data.columns, index=all_data.index)
0 1 2 3 4
0 -0.369274 3.952847 -0.88083 1.489691 -3.265986
1 -0.369274 4.743416 -1.17444 -0.579324 -15.513435
2 1.477098 0.000000 -1.17444 -1.406930 -3.265986
3 -0.369274 4.743416 0.88083 1.075888 -15.513435
4 -0.984732 3.162278 -1.17444 -0.993127 -5.307228
Не стесняйтесь проверять математику, но она удовлетворяет вашим требованиям: операция применяется к первому столбцу информационного кадра с первыми значениями sigma
и mu
,второй столбец со вторыми значениями и т.д ...