在熊猫中将序列/二维数组转换为数据框列

时间:2020-11-07 04:08:26

标签: python pandas dataframe

所以我使用以前训练有素的模型来预测新数据

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

我如何用熊猫来做到这一点?

2 个答案:

答案 0 :(得分: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

使用df.wheredf.max(axis=1)max的值替换为1,否则将0替换为

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

答案 1 :(得分:0)

手动遍历每个元素都可以,但是不能确定这对于您的应用程序是多么可行。

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]])