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中的值进行离散化并转换为二进制矩阵?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Parsing Techniques

Parsing Techniques

Dick Grune、Ceriel J.H. Jacobs / Springer / 2010-2-12 / USD 109.00

This second edition of Grune and Jacobs' brilliant work presents new developments and discoveries that have been made in the field. Parsing, also referred to as syntax analysis, has been and continues......一起来看看 《Parsing Techniques》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具