从数据帧列值创建二进制向量



我有一个数据帧df

ID   KD     DT   
0    1    2     5.6  
1    1    5     8.7  
4    4    9     1.9  
5    4    2     1.7  
6    4    7     8.8  
2    6    9     8.3  
3    6    7     7.2  
9    7   36     3.1  
10   7    2     2.2  
12   7    7     5.6

我想创建一个数据帧,以便为每个唯一的KD值添加新的{-1,0,1}列,具体取决于ID(来自ID值列表)和DTID = [1,2,4,6,7,8].新数据帧应具有len(ID)+1列,其中第一列是唯一的KD值,len(D)列,以便column ID = 1如果df.loc[(df.ID==id) & (df.KD==kd),'DT'] >= 5column ID = 0(kd,id)对不在df中,column ID = -1如果df.loc[(df.ID==id) & (df.KD==kd),'DT'] < 5

对于上面给出的数据帧,新数据帧应该是

DF2

KD     1     2    4     6     7     8    
0    2     1     0    -1    0     -1    0 
1    5     1     0     0    0      0    0  
2    7     0     0     1    1      1    0
3    9     0     0    -1    1      0    0
4   36     0     0     0    0     -1    0 

事实上,唯一KDID的数量非常大(在 10K 范围内)。任何帮助找到一种非常有效的方法来做到这一点。请?

让我们使用pivotmask来试试这个:

ID = [1,2,4,6,7,8]
df_p = df.pivot('KD', 'ID', 'DT')
df_p.mask((df_p >= 5), 1).mask(df_p < 5, -1).reindex(ID, axis=1)
.fillna(0).reset_index()

输出:

ID  KD    1    2    4    6    7    8
0    2  1.0  0.0 -1.0  0.0 -1.0  0.0
1    5  1.0  0.0  0.0  0.0  0.0  0.0
2    7  0.0  0.0  1.0  1.0  1.0  0.0
3    9  0.0  0.0 -1.0  1.0  0.0  0.0
4   36  0.0  0.0  0.0  0.0 -1.0  0.0

最新更新