создание двоичного вектора из значений столбца данных - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть фрейм данных 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 if 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 очень большой (в диапазоне 10К). Любая помощь в поиске очень эффективного способа сделать это. пожалуйста?

1 Ответ

1 голос
/ 28 апреля 2020

Давайте попробуем это, используя 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...