我想离开这个..
type cost
dog 5
dog 2
cat 4
rat 6
到此..
dog cat rat
5 0 0
2 0 0
0 4 0
0 0 6
这几乎有用......
pd.concat([ tbl1['type'].astype(str) == x for x in ['dog','cat','rat']], 1, keys=['dog','cat','rat'])
但是...我得到了一个真/假值表
我正在尝试避免使用for循环来生成N个列,因为实际上我可能需要在' type'中为不同的值设置100多个列。柱
答案 0 :(得分:4)
您可以使用pivot_table
df.pivot_table(values='cost', index=df.index, columns='type', aggfunc='first').fillna(0)
type cat dog rat
0 0 5 0
1 0 2 0
2 4 0 0
3 0 0 6
答案 1 :(得分:3)
get_dummies
+ dot
-
v = pd.get_dummies(df.type)
v[:] = v.values * df.cost.values[:, None]
v
cat dog rat
0 0 5 0
1 0 2 0
2 4 0 0
3 0 0 6
答案 2 :(得分:2)
使用boolean indexing
进行过滤,类别由unique
生成:
c = df['type'].unique()
df = pd.concat([df.loc[df['type'] == x, 'cost'] for x in c], 1, keys=c).fillna(0).astype(int)
print (df)
dog cat rat
0 5 0 0
1 2 0 0
2 0 4 0
3 0 0 6