Pandas groupby получает значения месяца и года - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть следующий фрейм данных (50000 строк для 2016,201,2018):

data.head()
             Values
Date              
2016-07-20    10.0
2016-07-20    10.0
2016-07-22     1.0
2016-07-22     1.0
2016-07-22     1.0

simple groupby:

data.groupby([(data1.index.year==2018),(data1.index.month==5)])['Values'].sum()

False  False   1461787.35
       True      80714.53
True   False    862589.66
       True     172600.04
Name: Values, dtype: float64

Как изменить False иTrue в year и month до 2018 и 5?

Ожидаемый результат:

    2018     5   80714.53
    Name: Values, dtype: float64

1 Ответ

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

Требуется группировка по year с и month с:

#changed data for better sample
print (data)

            Values
Date              
2015-07-20    10.0
2015-05-20    20.0
2016-05-20     2.0
2018-05-22     1.0
2018-05-22     3.0
2018-07-22     4.0

df1 = data.groupby([data.index.year, data.index.month])['Values'].sum()
print (df1)
Date  Date
2015  5       20.0
      7       10.0
2016  5        2.0
2018  5        4.0
      7        4.0
Name: Values, dtype: float64

Ваше решение группируется по логической маске, True фильтруется только 2018 лет, а False свсе не 2018 строки, аналогичные для month s:

df2 = data.groupby([(data.index.year==2018),(data.index.month==5)])['Values'].sum()
print (df2)
False  False    10.0
       True     22.0
True   False     4.0
       True      4.0
Name: Values, dtype: float64

Если можно использовать только отфильтрованные значения, используйте:

df = data[(data.index.year==2018) & (data.index.month==5)]
print (df)
            Values
Date              
2018-05-22     1.0
2018-05-22     3.0

out = df.groupby([df.index.year, df.index.month])['Values'].sum()
print (out)
Date  Date
2018  5       4.0
Name: Values, dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...