将DataFrame中的列转置为二进制矩阵

Mar*_*kus 2 python dataframe pandas

语境

可以说我有一个pandas-DataFrame像这样:

>>> data.head()
                            values  atTime
date        
2006-07-01 00:00:00+02:00   15.10   0000
2006-07-01 00:15:00+02:00   16.10   0015
2006-07-01 00:30:00+02:00   17.75   0030
2006-07-01 00:45:00+02:00   17.35   0045
2006-07-01 01:00:00+02:00   17.25   0100
Run Code Online (Sandbox Code Playgroud)

atTime表示用作索引的时间戳的小时和分钟。我想将atTime列转换为二进制矩阵(使其稀疏也是一种选择),它将在机器学习方法中用作名义特征。

所需的结果应类似于:

>>> data.head()
                            values  0000  0015  0030  0045  0000
date        
2006-07-01 00:00:00+02:00   15.10   1     0     0     0     0
2006-07-01 00:15:00+02:00   16.10   0     1     0     0     0
2006-07-01 00:30:00+02:00   17.75   0     0     1     0     0
2006-07-01 00:45:00+02:00   17.35   0     0     0     1     0
2006-07-01 01:00:00+02:00   17.25   0     0     0     0     1
Run Code Online (Sandbox Code Playgroud)

如预期的那样,当考虑atTime中的所有值时,此矩阵将更大。


我的问题

我可以通过使用apply和使用时间戳的变通办法来获得所需的结果,以便事先创建新的列。

但是,在pandas中是否有内置选项(或通过numpy,将atTime视为numpy-array)来实现相同目的而没有解决方法?

cs9*_*s95 8

这是一个用例get_dummies

df.join(pd.get_dummies(df.pop('atTime')))

                          values  0000  0015  0030  0045  0100
date                                                          
2006-07-01 00:00:00+02:00  15.10     1     0     0     0     0
2006-07-01 00:15:00+02:00  16.10     0     1     0     0     0
2006-07-01 00:30:00+02:00  17.75     0     0     1     0     0
2006-07-01 00:45:00+02:00  17.35     0     0     0     1     0
2006-07-01 01:00:00+02:00  17.25     0     0     0     0     1
Run Code Online (Sandbox Code Playgroud)