2013-03-25 2 views
-1

У меня есть DataFrame, через который я хотел бы рассчитать проценты; однако, пытаясь сделать это, python плюет назад либо 0, либо 1.Деление суммы одного столбца DataFrame на сумму другого столбца DataFrame дает 0

Например, столбцы OIR.a1.d.bull и OIR.a1r1.d - это массивы, заполненные 1s и 0s.

>>> data['OIR.a1.d.bull'].sum() 
653 
>>> data['OIR.a1r1.d'].sum() 
320 
>>> den = data['OIR.a1.d.bull'].sum() 
>>> num = data['OIR.a1r1.d'].sum() 
>>> den 
653 
>>> num 
320 
>>> num/den 
0 

Ожидаю увидеть - примерно - следующее.

>>> num/den 
0.49004594 
+3

'1.0 * num/den' –

+0

works. Зачем? Преобразует ли он целое и округление? – Brian

+0

См. [PEP 238] (http://www.python.org/dev/peps/pep-0238/). –

ответ

0

Вы делаете целочисленное деление, чтобы ваш результат будет целым, что означает, что дробная часть результата дивизии обрезана. Чтобы получить float, вам нужно преобразовать одно из ваших значений в float.

float(num)/den 
+0

Поскольку OP использует Python 2.7, он также имеет возможность выполнять 'из __future__ import division'. –

+2

@StevenRumbalski. Вы правы, и я решил добавить эту информацию, но, возможно, OP использует '/' для строгого разделения int в других местах своего кода, который сломается, когда будет выполняться как float-деление. – halex

Смежные вопросы