У меня есть пример df1
ниже... Мне нужно создать новый df_sub
путем вычитания значений в нижней части каждого столбца из остальной части столбца.
df_sub = я (каждое значение в каждом столбце) - (a_squared * Temp + b * Temp + c) **
Пример df1.head()
Temperature A1 A2 A3 A4
25.0 681.51 147.40 409.26 680.83
25.2 615.89 124.34 362.39 618.37
25.4 568.72 95.22 310.37 567.22
25.6 522.08 89.74 272.69 516.53
25.8 480.04 68.20 229.03 477.30
Пример df1.tail()
Temperature A1 A2 A3 A4
95.0 -102.14 6348.77 2276.56 -2545.60
a 15.26 10.67 -1.87 13.25
b -1016.94 -623.29 29.40 -902.77
c 16557.63 9044.62 715.07 14941.87
a_squared 232.95 113.95 3.53 175.65
Это то, что я пробовал, и ошибка, которую я получаю...
df_sub = df1.iloc[:-4] - (Temp * df1.iloc[-1, :] + (Temp * df1.iloc[-3, :]) + df1.iloc[-2, :])
Temp - это список, например: np.arange(25, 95.2, 0.2)
ValueError: операнды не могут транслироваться вместе с фигурами (96,) (351,)
Любая помощь будет оценена!
Если Temp
является некоторым скаляром, необходимо создать индекс по столбцу " Temperature
помощью set_index
качестве первого шага:
df1 = df1.set_index('Temperature')
print (df1)
A1 A2 A3 A4
Temperature
25.0 681.51 147.40 409.26 680.83
25.2 615.89 124.34 362.39 618.37
25.4 568.72 95.22 310.37 567.22
25.6 522.08 89.74 272.69 516.53
25.8 480.04 68.20 229.03 477.30
95.0 -102.14 6348.77 2276.56 -2545.60
a 15.26 10.67 -1.87 13.25
b -1016.94 -623.29 29.40 -902.77
c 16557.63 9044.62 715.07 14941.87
a_squared 232.95 113.95 3.53 175.65
И затем несколько значений индекса, преобразованных в массив numpy с широковещанием:
idx = df1.index
#if necessary convert index to numeric
#idx = pd.to_numeric(df1.index, errors='coerce')
a = df1.iloc[-1].values * idx[:-4].values[:, None]
b = df1.iloc[-3].values * idx[:-4].values[:, None]
df_sub = df1.iloc[:-4] - (a + b + df1.iloc[-2].values)
print (df_sub)
A1 A2 A3 A4
Temperature
25.0 3723.630 3836.280 -1129.060 3916.960
25.2 3814.808 3915.088 -1182.516 3999.924
25.4 3924.436 3987.836 -1241.122 4094.198
25.6 4034.594 4084.224 -1285.388 4188.932
25.8 4149.352 4164.552 -1335.634 4295.126
95.0 57819.280 45691.450 -1566.860 51588.930