【问题标题】:Transpose column in a DataFrame into a binary matrix将 DataFrame 中的列转置为二进制矩阵
【发布时间】:2019-06-19 16:22:20
【问题描述】:

上下文

假设我有一个这样的 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)可以在没有解决方法的情况下实现相同的功能?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    这是get_dummies的一个用例:

    pd.get_dummies(df, columns=["atTime"]) 
    
                               values  atTime_0  atTime_15  atTime_30  atTime_45  atTime_100
    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
    

    根据 OP 的建议更新了解决方案。谢谢!

    【讨论】:

    • 哦..我从没想过这样的名字后面会有这样的东西..非常感谢您的快速回复!
    • 只是补充一下,因为我再次需要这个:使用当前的 pandas 包,您也可以运行 pd.get_dummies(data, columns=["atTime"]) 并获得相同的结果并保存连接 :)
    猜你喜欢
    • 2022-01-23
    • 2019-05-02
    • 1970-01-01
    • 2015-06-01
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 2015-10-22
    相关资源
    最近更新 更多