Pandas series.groupby (). Apply (.sum ()), .sum () не суммируют значения - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть следующий тестовый код: import pandas as pd import numpy as np

df = pd.DataFrame({'MONTH': [1,2,3,1,1,1,1,1,1,2,3,2,2,3,2,1,1,1,1,1,1,1], 
                   'HOUR': [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
                   'CIGFT': [np.NaN,12000,2500,73300,73300,np.NaN,np.NaN,np.NaN,np.NaN,12000,100,100,15000,2500,np.NaN,15000,11000,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN]})

cigs = pd.DataFrame()
cigs['cigsum'] = df.groupby(['MONTH','HOUR'])['CIGFT'].apply(lambda c: (c>=0.0).sum())
cigs['cigcount'] = df.groupby(['MONTH','HOUR'])['CIGFT'].apply(lambda c: (c>=0.0).count())

df.fillna(value='-', inplace=True)
cigs['cigminus'] = df.groupby(['MONTH','HOUR'])['CIGFT'].apply(lambda c: (c>=0.0).sum())

tfile = open('test_COUNT_manual.txt', 'a')
tfile.write(cigs.to_string())
tfile.close()

Я получаю следующие результаты:

Фрейм данных:

  CIGFT  HOUR  MONTH

0 NaN 0 1

1 12000.0 0 2

2 2500.0 0 3

3 73300.0 0 1

4 73300.0 0 1

5 NaN 0 1

6 NaN 0 1

7 NaN 0 1

8 NaN 0 1

9 12000.0 0 2

10 100,0 0 3

11 100,0 0 2

12 15000,0 0 2

13 2500,0 0 3

14 NaN 0 2

15 15000.0 0 1

16 11000.0 0 1

17 NaN 0 1

18 NaN 0 1

19 NaN 0 1

20 NaN 0 1

21 NaN 0 1

Результаты записи в файл:

        cigsum  cigcount  cigminus

MONTH HOUR

1 04 14 14

2 0 4 5 5

3 0 3 3 3

Моя проблема заключается в том, что .sum () не суммирует значения.Это делает подсчет ненулевых значений.Когда я заменяю нулевые значения на минус, .sum () дает тот же результат, что и count ().Итак, что я могу использовать, чтобы получить сумму значений, если .sum () не делает этого?

1 Ответ

0 голосов
/ 19 декабря 2018

Series.sum () -> возвращает сумму значений серии, исключая значения NA / null по умолчанию, как указано в официальных документах.

Вы находитесьПолучая ряды в лямбда-функции каждый раз, просто примените функцию суммы к рядам в лямбда-выражениях, и вы получите правильный результат.

Сделайте это,

cigs['cigsum'] = df.groupby(['MONTH','HOUR'])['CIGFT'].apply(lambda c: c.sum())

Результатом этого кода будет

MONTH  HOUR
1      0       172600.0
2      0        39100.0
3      0         5100.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...