Функция Sum не работает правильно с dataframe (Python) - PullRequest
0 голосов
/ 01 мая 2018

Я использую большой файл Excel с четырьмя столбцами, но мне нужны только два: Дата и HPCP. Цель этой программы - преобразовать даты в объекты даты, удалить дубликаты дат, а затем суммировать HPCP дубликатов. Я чувствую, что этот код должен работать, однако вывод очень неправильный. Код успешно преобразует даты в объекты даты, удаляет дубликаты, но не суммирует правильно. Любая помощь будет принята с благодарностью.

Ссылка на файл Excel: https://drive.google.com/open?id=1P5-k9Zyz8iFwx6Y-9yhnRozGGSvqpXLz

Пример некоторых строк из файла Excel:

      STATION           STATION_NAME         DATE        HPCP
COOP:305801 NY CITY  CENTRAL PARK NY US  20000101 01:00  0
COOP:305801 NY CITY  CENTRAL PARK NY US  20000104 15:00  0
COOP:305801 NY CITY  CENTRAL PARK NY US  20000104 16:00  0.01
COOP:305801 NY CITY  CENTRAL PARK NY US  20000104 17:00  0.03
COOP:305801 NY CITY  CENTRAL PARK NY US  20000104 18:00  0.04
COOP:305801 NY CITY  CENTRAL PARK NY US  20000104 19:00  0.12
COOP:305801 NY CITY  CENTRAL PARK NY US  20000104 20:00  0.17
COOP:305801 NY CITY  CENTRAL PARK NY US  20000104 21:00  0.13
COOP:305801 NY CITY  CENTRAL PARK NY US  20000104 22:00  0.04
COOP:305801 NY CITY  CENTRAL PARK NY US  20000104 23:00  0.09
COOP:305801 NY CITY  CENTRAL PARK NY US  20000105 00:00  0.07
COOP:305801 NY CITY  CENTRAL PARK NY US  20000105 01:00  0
COOP:305801 NY CITY  CENTRAL PARK NY US  20000109 21:00  0.01
COOP:305801 NY CITY  CENTRAL PARK NY US  20000109 22:00  0
COOP:305801 NY CITY  CENTRAL PARK NY US  20000110 00:00  0.01
COOP:305801 NY CITY  CENTRAL PARK NY US  20000110 13:00  0.15
COOP:305801 NY CITY  CENTRAL PARK NY US  20000110 14:00  0.29
COOP:305801 NY CITY  CENTRAL PARK NY US  20000110 15:00  0.24
COOP:305801 NY CITY  CENTRAL PARK NY US  20000110 16:00  0.15
COOP:305801 NY CITY  CENTRAL PARK NY US  20000110 17:00  0.01
COOP:305801 NY CITY  CENTRAL PARK NY US  20000113 08:00  0
COOP:305801 NY CITY  CENTRAL PARK NY US  20000113 09:00  0.01
COOP:305801 NY CITY  CENTRAL PARK NY US  20000113 10:00  0.02
COOP:305801 NY CITY  CENTRAL PARK NY US  20000113 15:00  0.01
COOP:305801 NY CITY  CENTRAL PARK NY US  20000113 16:00  0.01
COOP:305801 NY CITY  CENTRAL PARK NY US  20000113 17:00  0
COOP:305801 NY CITY  CENTRAL PARK NY US  20000120 07:00  0
COOP:305801 NY CITY  CENTRAL PARK NY US  20000120 08:00  0
COOP:305801 NY CITY  CENTRAL PARK NY US  20000120 09:00  0

Код:

import sys
import pandas as pd
import datetime

data = pd.read_csv(sys.argv[1])
data = data[['DATE','HPCP']]

data['DATE'] = pd.to_datetime(data['DATE'])

for index, row in data.iterrows():
    print index
    data.loc[index,'DATE'] = data.loc[index,'DATE'].date()

data = data.groupby(['DATE'],as_index=False).sum()

print data

Выход:

        DATE      HPCP
0    2000-01-01  11999.88
1    2000-01-03      0.00
2    2000-01-04   1002.97
3    2000-01-05      1.25
4    2000-01-09   1000.01
5    2000-01-10      4.72
6    2000-01-11      0.00
7    2000-01-13      0.17
8    2000-01-16      0.00
9    2000-01-20   1000.11
10   2000-01-21      0.12
        ...       ...
2871 2013-12-17      0.66
2872 2013-12-21      0.01
2873 2013-12-22      0.04
2874 2013-12-23      2.06
2875 2013-12-24      0.00
2876 2013-12-26      0.00
2877 2013-12-29      4.90
2878 2013-12-30      0.00
2879 2013-12-31      0.00
2880 2014-01-01   3999.96

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

В файле .csv есть множество строк, на которые вы ссылаетесь HPCP из 999.99. Ваша сумма правильно работает для этих данных.

0 голосов
/ 02 мая 2018

Это не так, эти большие значения верны. Я импортировал ваш файл данных в Excel, создал сводную таблицу, используя только данные в качестве каждой строки и сумму HPCP в качестве значения, и вот первые несколько результатов:

Row Labels  Sum of HPCP
1/1/2000    11999.88
1/3/2000    0
1/4/2000    1002.97
1/5/2000    1.25
1/9/2000    1000.01
...

Хорошей новостью является то, что ваш код в порядке.

Чтобы завершить долгую дискуссию в комментариях к вашему вопросу, я просто скажу, что вам нужно отличать «удивительное» от «неправильного». Эти результаты являются «удивительными», учитывая, как правило, небольшие значения в столбце HPCP, но они не являются «неправильными». Возможно, вам нужна другая метрика (имеется в виду? Max?) Или вы хотите выполнить предварительную фильтрацию, но для данных, которые вы дали, и описания того, что вы хотите сделать, ваш код и его результаты верны, даже если выходные значения являются неожиданными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...