Изменить форму панд df: строки значений в булеву матрицу - PullRequest
0 голосов
/ 17 мая 2018

Существует кадр данных панд:

id, key
1, A
1, B
1, B
1, C
2, C

И я хочу, чтобы он выглядел следующим образом (где 1/0 - Истина / Ложь в данных):

id, A, B, C
1, 1, 1, 1
2, 0, 0, 1

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Я пробовал это,

temp=pd.get_dummies(df['key']).replace(0,np.NaN)
df=pd.concat([df,temp],axis=1)
df= df.groupby(['id']).apply(lambda x:x.fillna(method='bfill'))
print df.drop_duplicates(subset=['id']).fillna(0)

Вывод

   id key    A    B    C
0   1   A  1.0  1.0  1.0
4   2   C  0.0  0.0  1.0
0 голосов
/ 17 мая 2018

Используйте drop_duplicates с groupby, size и unstack:

df = df.drop_duplicates().groupby(['id', 'key']).size().unstack(fill_value=0)
print (df)
key  A  B  C
id          
1    1  1  1
2    0  0  1

Или get_dumes с set_index и max на index - если несколько 1, всегда возвращается 1:

df = pd.get_dummies(df.set_index('id')['key']).max(level=0)
print (df)
    A  B  C
id         
1   1  1  1
2   0  0  1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...