Code Sample, a copy-pastable example if possible
import pandas as pd
df = pd.DataFrame({'foo': [1.0001] * 5 + [0.]*5})
df
foo | |
---|---|
0 | 1.0001 |
1 | 1.0001 |
2 | 1.0001 |
3 | 1.0001 |
4 | 1.0001 |
5 | 0.0000 |
6 | 0.0000 |
7 | 0.0000 |
8 | 0.0000 |
9 | 0.0000 |
df.rolling(2).sum()
foo | |
---|---|
0 | NaN |
1 | 2.000200e+00 |
2 | 2.000200e+00 |
3 | 2.000200e+00 |
4 | 2.000200e+00 |
5 | 1.000100e+00 |
6 | 4.440892e-16 |
7 | 4.440892e-16 |
8 | 4.440892e-16 |
9 | 4.440892e-16 |
Problem description
Rolling sum of zeros sometimes gives a very small negative number, which is not the desired behavior.
Output of pd.show_versions()
INSTALLED VERSIONS
------------------
commit: None
python: 3.5.4.final.0
python-bits: 64
OS: Linux
OS-release: 4.1.35-pv-ts2
machine: x86_64
processor:
byteorder: little
LC_ALL: en_US.utf8
LANG: en_US.utf8
LOCALE: en_US.UTF-8
pandas: 0.20.3
pytest: 3.2.1
pip: 9.0.1
setuptools: 36.4.0
Cython: 0.26
numpy: 1.12.1
scipy: 0.19.1
xarray: None
IPython: 6.1.0
sphinx: 1.6.3
patsy: 0.4.1
dateutil: 2.6.1
pytz: 2017.2
blosc: None
bottleneck: 1.2.1
tables: 3.4.2
numexpr: 2.6.2
feather: None
matplotlib: 2.0.2
openpyxl: 2.4.8
xlrd: 1.1.0
xlwt: None
xlsxwriter: 0.9.8
lxml: None
bs4: 4.6.0
html5lib: 0.9999999
sqlalchemy: 1.1.13
pymysql: None
psycopg2: None
jinja2: 2.9.6
s3fs: None
pandas_gbq: None
pandas_datareader: None
Comment From: mroeschke
xref #13254
Comment From: jreback
duplicate.
Comment From: jreback
thanks for the report @liuguangyu0220 ideally we would use kahan summation to avoid this problem. welcome to take a PR to do so.