在pandas DataFrame上进行就地逐行操作

Bre*_*arn 9 python pandas

假设我有这个:

>>> x = pandas.DataFrame([[1.0, 2.0, 3.0], [3, 4, 5]], columns=["A", "B", "C"])
>>> print x
   A  B  C
0  1  2  3
1  3  4  5
Run Code Online (Sandbox Code Playgroud)

现在我想x按行进行标准化- 也就是说,将每一行除以其总和.如本问题所述,这可以通过实现x = x.div(x.sum(axis=1), axis=0).但是,这会创建一个新的 DataFrame.如果我的DataFrame很大,那么即使我立即将它分配给原始名称,也可以在创建这个新的DataFrame时消耗大量内存.

有没有一种有效的方法来执行此操作?我希望像x.idiv()这样的东西可以axis选择div但是更新x到位.对于这个特定的情况,我需要划分,但有时为所有基本操作提供类似的就地版本也是很好的.

(我可以通过逐行迭代并将每个规范化的行分配回原始行来更新它,但这很慢,我正在寻找更有效的解决方案.)

And*_*den 12

您可以直接在numpy中执行此操作(无需创建副本):

In [11]: x1 = x.values.T

In [12]: x1
Out[12]: 
array([[ 1.,  3.],
       [ 2.,  4.],
       [ 3.,  5.]])

In [13]: x1 /= x1.sum(0)

In [14]: x
Out[14]: 
          A         B         C
0  0.166667  0.333333  0.500000
1  0.250000  0.333333  0.416667
Run Code Online (Sandbox Code Playgroud)

也许应该有一个div的内部标志......?

  • 啊,我一直在玩'值',但是因为`x.values是x.values`是假的而被绊倒了,并且认为它在引擎盖下的某处丢失了连接. (3认同)