Существует кадр данных панд:
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
Я пробовал это,
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
Используйте drop_duplicates с groupby, size и unstack:
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:
get_dumes
set_index
max
index
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