我的意思是这样的:
我有一个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,那么它可以是每个可能的int值,或者也可以是binning。
仅供参考:在我的实际应用程序中,表最多有200万行,完整的“扩展”矩阵可能有数百列。
有什么简单的方法来执行这个操作吗?
另外,我也愿意跳过这一步,因为我正在尝试计算一个Burt表(这是交叉表的对称矩阵)。有没有一种简单的方法可以用crosstab
函数做类似的事情?否则,计算交叉表只是简单的矩阵乘法。
对于示例中的标记列,如
a
和c
列,可以使用pandas内置方法get_dummies()。例如:
你可以使用某种广播:
然后用
pandas.concat
或类似的方法将所有部分连接在一起。注意,我已经实现了新的
cut
和qcut
函数来离散连续数据:http://pandas-docs.github.io/pandas-docs-travis/basics.html#discretization-and-quantiling
相关问题 更多 >
编程相关推荐