重塑pandas df:值的行到布尔矩阵

时间:2018-05-17 08:47:01

标签: python pandas

有一个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

2 个答案:

答案 0 :(得分:4)

drop_duplicatesgroupbysizeunstack一起使用:

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_indexmax 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