#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
Поэтому я использую свою ранее обученную модель для прогнозирования новых данных
y_pred_aplikasi = model.predict(X_aplikasi)
y_pred_aplikasi
Он возвращает
array([[7.7066602e-07, 9.9993092e-01, 4.6858725e-07],
[7.1568817e-02, 4.3571211e-07, 7.3567069e-01],
[9.8825598e-01, 6.3803792e-03, 4.4066067e-07],
...,
[3.8332163e-15, 1.0000000e 00, 1.4775689e-11],
[1.8400473e-14, 1.0000000e 00, 6.1960957e-11],
[7.0748132e-01, 5.9783965e-02, 5.7850748e-02]], dtype=float32)
Я хочу превратить эту последовательность во что-то вроде этого, при этом наибольшее значение каждой части станет 1, а остальное 0.
A B C
0 1 0
0 0 1
1 0 0
....
1 0 0
0 0 1
1 0 0
как я могу добиться этого с помощью pandas?
Ответ №1:
Учитывая, что это ваш массив:
In [841]: a
Out[841]:
array([[7.7066602e-07, 9.9993092e-01, 4.6858725e-07],
[7.1568817e-02, 4.3571211e-07, 7.3567069e-01],
[9.8825598e-01, 6.3803792e-03, 4.4066067e-07],
[3.8332163e-15, 1.0000000e 00, 1.4775689e-11],
[1.8400473e-14, 1.0000000e 00, 6.1960957e-11],
[7.0748132e-01, 5.9783965e-02, 5.7850748e-02]])
Преобразуйте приведенный выше массив в фрейм данных, используя pd.DataFrame constructor
:
In [851]: df = pd.DataFrame(a, columns=['A', 'B', 'C'])
In [852]: df
Out[852]:
A B C
0 7.706660e-07 9.999309e-01 4.685873e-07
1 7.156882e-02 4.357121e-07 7.356707e-01
2 9.882560e-01 6.380379e-03 4.406607e-07
3 3.833216e-15 1.000000e 00 1.477569e-11
4 1.840047e-14 1.000000e 00 6.196096e-11
5 7.074813e-01 5.978397e-02 5.785075e-02
Замените max
значение на 1
, else 0
, используя df.where
и df.max(axis=1)
:
In [854]: df = df.eq(df.where(df != 0).max(1), axis=0).astype(int)
In [855]: df
Out[855]:
A B C
0 0 1 0
1 0 0 1
2 1 0 0
3 0 1 0
4 0 1 0
5 1 0 0
Ответ №2:
Ручной цикл по каждому элементу может работать, но не уверен, насколько это возможно для вашего приложения.
for i in range(len(y_pred_aplikasi)):
for j in range(3):
# for j in range(len(y_pred_aplikasi[i])): # to be more dynamic
if y_pred_aplikasi[i][j] == y_pred_aplikasi[i].max():
y_pred_aplikasi[i][j] = 1
else:
y_pred_aplikasi[i][j] = 0
y_pred_aplikasi.astype(int)
Out[5]:
array([[0, 1, 0],
[0, 0, 1],
[1, 0, 0],
...,
[0, 1, 0],
[0, 1, 0],
[1, 0, 0]])