我有一个已知级别的分类变量(例如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)
答案 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
的好处。