python – 如何对pandas DataFrame中的值进行离散化并转换为二进制矩阵?

栏目: 数据库 · 发布时间: 5年前

内容简介:翻译自:https://stackoverflow.com/questions/10791661/how-do-i-discretize-values-in-a-pandas-dataframe-and-convert-to-a-binary-matrix

我的意思是这样的:

我有一个DataFrame,列可以是分类或名义.对于每个观察(行),我想生成一个新行,其中变量的每个可能值现在都是它自己的二进制变量.例如,这个矩阵(第一行是列标签)

'a'     'b'     'c'
one     0.2     0
two     0.4     1
two     0.9     0
three   0.1     2
one     0.0     4
two     0.2     5

会被转换成这样的东西:

'a'              'b'                                                    'c'
one  two  three  [0.0,0.2)  [0.2,0.4)  [0.4,0.6)  [0.6,0.8)  [0.8,1.0]   0   1   2   3   4   5

 1    0     0        0          1          0          0          0       1   0   0   0   0   0
 0    1     0        0          0          0          0          1       0   1   0   0   0   0
 0    1     0        0          0          0          0          1       1   0   0   0   0   0
 0    0     1        1          0          0          0          0       0   0   1   0   0   0
 1    0     0        1          0          0          0          0       0   0   0   0   1   0
 0    1     0        0          1          0          0          0       0   0   0   0   0   1

初始矩阵中的每个变量(列)都被分成所有可能的值.如果它是分类的,那么每个可能的值将成为新列.如果它是一个浮点数,则值会以某种方式进行分箱(例如,总是分成10个箱).如果它是一个int,那么它可以是每个possibel int值,或者也可能是binning.

仅供参考:在我的实际应用中,该表最多有200万行,完整的“扩展”矩阵可能有数百列.

有没有简单的方法来执行此操作?

另外,我也愿意跳过这一步,因为我真的想要计算一个Burt表(它是交叉表的对称矩阵).是否有一种简单的方法可以使用交叉表函数执行类似的操作?否则,计算交叉列表只是一个简单的矩阵乘法.

你可以使用某种广播:

In [58]: df
    Out[58]:
           a    b  c
    0    one  0.2  0
    1    two  0.4  1
    2    two  0.9  0
    3  three  0.1  2
    4    one  0.0  4
    5    two  0.2  5

    In [41]: (df.a.values[:,numpy.newaxis] == df.a.unique()).astype(int)
    Out[41]:
    array([[1, 0, 0],
           [0, 1, 0],
           [0, 1, 0],
           [0, 0, 1],
           [1, 0, 0],
           [0, 1, 0]])

    In [54]: ((0 <= df.b.values[:,numpy.newaxis]) & (df.b.values[:,numpy.newaxis] < 0.2)).astype(int)
    Out[54]:
    array([[0],
           [0],
           [0],
           [1],
           [1],
           [0]])

    In [59]: (df.c.values[:,numpy.newaxis] == df.c.unique()).astype(int)
    Out[59]:
    array([[1, 0, 0, 0, 0],
           [0, 1, 0, 0, 0],
           [1, 0, 0, 0, 0],
           [0, 0, 1, 0, 0],
           [0, 0, 0, 1, 0],
           [0, 0, 0, 0, 1]])

然后与pandas.concat或类似的东西一起加入所有部分.

翻译自:https://stackoverflow.com/questions/10791661/how-do-i-discretize-values-in-a-pandas-dataframe-and-convert-to-a-binary-matrix


以上所述就是小编给大家介绍的《python – 如何对pandas DataFrame中的值进行离散化并转换为二进制矩阵?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

MySQL入门很简单

MySQL入门很简单

黄缙华 / 清华大学出版社 / 2011-1 / 59.50元

《MySQL入门很简单》从初学者的角度出发,由浅入深,循序渐进地介绍了mysql数据库应用与开发的相关知识。书中提供了大量操作mysql数据库的示例,还提供了大量实例和上机实践内容,供读者演练。《MySQL入门很简单》附带1张dvd光盘,内容为与《MySQL入门很简单》内容完全配套的多媒体教学视频和《MySQL入门很简单》涉及的源代码。 《MySQL入门很简单》共分5篇。第1篇介绍数据库的基......一起来看看 《MySQL入门很简单》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码