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

时间:2020-04-28 19:10:12

标签: python-3.x pandas dataframe

我有一个数据框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'] >= 5,则column ID = 0如果{{ 1}}对不在(kd,id)df中,如果column ID = -1

对于上面给出的数据框,新数据框应为

df2

df.loc[(df.ID==id) & (df.KD==kd),'DT'] < 5

实际上,唯一 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 KD的数量非常大(在10K范围内)。寻找一种非常有效的方法的帮助。请吗?

1 个答案:

答案 0 :(得分:1)

让我们尝试使用QModelIndexpivot

mask

输出:

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