У меня есть df
следующим образом:
ContextID EscAct_Curr_A StepID
7289973 0.122100122 1
7289973 0 2
7289973 0 2
7289973 0.122100122 2
7289973 0.122100122 2
7289973 0.122100122 2
7289973 0.122100122 2
7289999 0.244200245 1
7289999 0.244200245 1
7289999 0.244200245 1
7289999 0.244200245 2
7289999 0.366300374 2
7289999 0.366300374 2
7289999 0.366300374 2
7290025 0.122100122 1
7290025 0.122100122 1
7290025 0.122100122 2
7290025 0 2
7290025 0 2
7290025 0.122100122 2
Что я хочу сделать, это объединить все значения из разных StepID и создать отдельную df для него.
ДляНапример, все значения StepID
1 должны быть сохранены в один df, скажем, s1, а все значения StepID
2 должны быть сохранены в один df, скажем, s2 и так далее.У меня 24 таких StepID.После того, как это сделано, я хочу построить диаграмму рассеяния после запуска алгоритма машинного обучения.
Что я сделал:
Для StepID 1
s1 = X.loc[X['StepID'] == 1]
s1_array = s1.iloc[:,1].values.astype(float).reshape(-1,1)
min_max_scaler = preprocessing.MinMaxScaler()
scaled_array_s1 = min_max_scaler.fit_transform(s1_array)
s1.iloc[:,1]=scaled_array_s1
ocsvm = OneClassSVM(nu = 0.1, kernel = 'rbf', gamma = 'scale')
s1['y_ocsvm1'] = ocsvm.fit_predict(s1.values[:,[1]])
Для StepID 2
s2 = X.loc[X['StepID'] == 2]
s2_array = s2.iloc[:,1].values.astype(float).reshape(-1,1)
min_max_scaler = preprocessing.MinMaxScaler()
scaled_array_s2 = min_max_scaler.fit_transform(s2_array)
s2.iloc[:,1]=scaled_array_s2
ocsvm = OneClassSVM(nu = 0.1, kernel = 'rbf', gamma = 'scale')
s2['y_ocsvm2'] = ocsvm.fit_predict(s2.values[:,[1]])
Построение диаграммы рассеивания:
fig, ax = plt.subplots()
ax.scatter(s1.values[s1['y_ocsvm1'] == 1, 2], s1.values[s1['y_ocsvm1'] == 1, 1], c = 'green', label = 'Normal')
ax.scatter(s1.values[s1['y_ocsvm1'] == -1, 2], s1.values[s1['y_ocsvm1'] == -1, 1], c = 'red', label = 'Outlier')
ax.scatter(s2.values[s2['y_ocsvm2'] == 1, 2], s2.values[s2['y_ocsvm2'] == 1, 1], c = 'green')
ax.scatter(s2.values[s2['y_ocsvm2'] == -1, 2], s2.values[s2['y_ocsvm2'] == -1, 1], c = 'red')
plt.legend()
Эти коды делаютэто именно то, чего я хочу, но написание таких кодов для 24 различных StepID очень утомительно.Итак, я хотел бы знать, есть ли более компактный способ добиться следующего, возможно, с помощью цикла или функций.