Pandas:将分类变量的值映射到预定义的虚拟列列表

时间:2014-11-03 23:03:21

标签: python pandas dummy-data

我有一个已知级别的分类变量(例如hour只包含0到23之间的值),但现在并非所有这些变量都可用(例如,我们有测量结果)在0到11点之间,而从12到23的小时数没有被覆盖),但其他值将在稍后添加。如果我们天真地使用pandas.get_dummies()将值映射到指标变量,我们最终只会有12个而不是24个。有没有办法将分类变量的值映射到预定义的虚拟变量列表

以下是预期行为的示例:

possible_values = range(24)
hours = get_dummies_on_steroids(df['hour'], prefix='hour', levels=possible_values)

1 个答案:

答案 0 :(得分:6)

在pandas 0.15:

中使用新的和改进的Categorical类型
import pandas as pd
import numpy as np
df = pd.DataFrame({'hour': [0, 1, 3, 8, 13, 14], 'val': np.random.randn(6)})
df
Out[4]: 
   hour       val
0     0 -0.098287
1     1 -0.682777
2     3  1.000749
3     8 -0.558877
4    13  1.423675
5    14  1.461552

df['hour_cat'] = pd.Categorical(df['hour'], categories=range(24))
pd.get_dummies(df['hour_cat'])
Out[6]: 
   0   1   2   3   4   5   6   7   8   9  ...  
0   1   0   0   0   0   0   0   0   0   0 ...      
1   0   1   0   0   0   0   0   0   0   0 ...   
2   0   0   0   1   0   0   0   0   0   0 ...   
3   0   0   0   0   0   0   0   0   1   0 ...   
4   0   0   0   0   0   0   0   0   0   0 ...   
5   0   0   0   0   0   0   0   0   0   0 ...

您描述的情况,您知道您的数据可以采用一组特定的值,但是 你没有必要观察所有这些,正是Categorical的好处。