我有一个数据框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
如果{{ 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范围内)。寻找一种非常有效的方法的帮助。请吗?
答案 0 :(得分:1)
让我们尝试使用QModelIndex
和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()