совокупность панд включает все группы - PullRequest
2 голосов
/ 17 апреля 2019

У меня есть следующая проблема с групповой агрегацией, то есть добавление групп, которые не представлены в кадре данных, но основаны на желаемом выводе, должны быть включены.Пример:

import pandas as pd
from pandas.compat import StringIO

csvdata = StringIO("""day,sale
1,1
2,4
2,10
4,7
5,2.3
7,4.4
2,3.4""") 
#day 3,6 are intentionally not included here but I'd like to have it in output

df = pd.read_csv(csvdata, sep=",")
df1=df.groupby(['day'])['sale'].agg('sum').reset_index().rename(columns={'sale':'dailysale'})

df1

Как я могу получить следующее?Спасибо!

1   1.0
2   17.4
3   0.0
4   7.0
5   2.3
6   0.0
7   4.4

1 Ответ

1 голос
/ 17 апреля 2019

Вы можете добавить Series.reindex с указанным range после агрегирования sum:

df1 = (df.groupby(['day'])['sale']
         .sum()
         .reindex(range(1, 8), fill_value=0)
         .reset_index(name='dailysale'))
print (df1)

   day  dailysale
0    1        1.0
1    2       17.4
2    3        0.0
3    4        7.0
4    5        2.3
5    6        0.0
6    7        4.4

Другая идея заключается в использовании ordered categorical, поэтому агрегация sum добавить отсутствуетстроки:

df['day'] = pd.Categorical(df['day'], categories=range(1, 8), ordered=True)
df1 = df.groupby(['day'])['sale'].sum().reset_index(name='dailysale')
print (df1)
  day  dailysale
0   1        1.0
1   2       17.4
2   3        0.0
3   4        7.0
4   5        2.3
5   6        0.0
6   7        4.4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...