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

时间:2019-06-19 16:22:20

标签: python pandas dataframe

上下文

让我们说我有一个像这样的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

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

可以预见,考虑到 atTime 中的所有值时,此矩阵将更大。


我的问题

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

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

1 个答案:

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