我有一个数据帧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
值列表)和DT
。ID = [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
(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
事实上,唯一KD
和ID
的数量非常大(在 10K 范围内)。任何帮助找到一种非常有效的方法来做到这一点。请?
让我们使用pivot
和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()
输出:
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