上下文
让我们说我有一个像这样的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)来实现相同的解决方法? >
答案 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