有一个pandas数据帧:
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
答案 0 :(得分:4)
将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
答案 1 :(得分:-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