Python 将包含分类数据的列转换为每个类别的一列

Python 将包含分类数据的列转换为每个类别的一列,python,pandas,Python,Pandas,我有一个这样的数据框: df index id timestamp cat value 0 8066 101 2012-03-01 09:00:29 A 1 1 8067 101 2012-03-01 09:01:15 B 0 2 8068 101 2012-03-01 09:40:18 C 1 3 8069 102 2012-03-01 09:40:18

我有一个这样的数据框:

df  index    id           timestamp   cat  value
0   8066     101  2012-03-01 09:00:29  A      1   
1   8067     101  2012-03-01 09:01:15  B      0   
2   8068     101  2012-03-01 09:40:18  C      1
3   8069     102  2012-03-01 09:40:18  C      0
我想要的是这样的东西:

df           timestamp           A     B     C     id      value
0        2012-03-01 09:00:29     1     0     0    101        1
1        2012-03-01 09:01:15     0     1     0    101        0
2        2012-03-01 09:40:18     0     0     1    101        1
3        2012-03-01 09:40:18     0     0     1    102        0
正如您在第2行中看到的,3个时间戳可以是重复的。起初,我尝试使用pivot(以时间戳作为索引),但由于这些重复项,这不起作用。我不想删除它们,因为其他数据是不同的,不应该丢失

由于索引不包含重复项,我想也许我可以在它上面旋转,然后将结果合并到原始数据帧中,但我想知道是否有更简单更直观的解决方案

谢谢

使用get_假人

请看这里:

StackOverflow示例如下:

这是一条可以实现您想要的目标的路线。假设您的数据帧名为df

df_new = df.join(pd.get_dummies(df.cat).drop(['index', 'cat'], axis=1)

当您的
get_dummies
返回df时,它将与您现有的df对齐,因此只需
concat
列方式即可:

In [66]:

pd.concat([df,pd.get_dummies(df['cat'])], axis=1)

Out[66]:
   index   id            timestamp cat  value  A  B  C
0   8066  101  2012-03-01 09:00:29   A      1  1  0  0
1   8067  101  2012-03-01 09:01:15   B      0  0  1  0
2   8068  101  2012-03-01 09:40:18   C      1  0  0  1
3   8069  102  2012-03-01 09:40:18   C      0  0  0  1
您可以通过执行
df.drop('cat',axis=1)

Hi,我刚才得到了相同的答案I#pydata。谢谢你的发帖,一定是文档中遗漏了它。