将具有分类数据的列转换为每个类别的一列

时间:2015-02-03 16:32:07

标签: python pandas

我有一个看起来像这样的DataFrame:

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(时间戳作为索引),但由于那些重复,这不起作用。我不想放弃它们,因为其他数据不同,不应该丢失。

由于 index 不包含重复内容,我想也许我可以转过头来,然后将结果合并到原始DataFrame中,但我想知道是否有更直观的解决方案。

谢谢!

3 个答案:

答案 0 :(得分:1)

这是实现你想要的单线程。假设您的数据框名为df

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

答案 1 :(得分: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)

答案 2 :(得分:0)