蟒蛇& pandas - 从2列值生成多个列

时间:2018-02-06 06:50:39

标签: python pandas dataframe pivot

我想离开这个..

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多个列。柱

3 个答案:

答案 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