4

我有一个具有已知级别的分类变量(例如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)
4

1 回答 1

10

Categorical在 pandas 0.15 中使用新的和改进的类型:

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有好处的。

于 2014-11-03T23:09:44.490 回答