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。谢谢你的发帖,一定是文档中遗漏了它。