Для установленного диапазона дат в кадре данных pandas добавьте нули вместо пропуска дня с использованием суммы по группам - PullRequest
0 голосов
/ 19 апреля 2019

Я (пытаюсь) автоматизировать некоторые диаграммы KPI, которые в настоящее время ведутся вручную (данные поступают с сервера SQL, затем отправляются в Excel, затем PPT, затем на мониторы дисплея) для трех менеджеров по продукту и для моей команды в целом.Я могу перенести данные о продажах из SQL в Python, и смог создать необходимые координирующие диаграммы в matplotlib.Это делается еженедельно, поэтому каждый период будет вращающимся с понедельника по субботу (без продаж в воскресенье).

Продажи помечены менеджером по продукту и по категориям, поэтому бывают случаи, когда случайные продажи будут отображатьсябез тега.Моя проблема заключается в групповом режиме, я получаю только дни с продажами, а не весь диапазон дат.Таким образом, когда я пытаюсь создать график, я получаю сообщение об ошибке, потому что не все серии имеют одинаковое количество входов.

Я уже три дня устал выяснять это самостоятельно, и наконец сдался.

В настоящий момент код DataFrame выглядит следующим образом1 / 2019-4 / 6/2019

Я пробовал asfreq, reindex и многие другие варианты ниже:

[In] : df['SO_DATE'] = pd.to_datetime(df['SO_DATE'])
df.set_index('SO_DATE').groupby(['PIC','PARENT_CATEGORY'], sort = False)['SALES'].resample('D').asfreq().fillna(0).reset_index()
[Out] :
     PIC        PARENT_CATEGORY  SO_DATE      SALES
0    Curly      Spam          2019-04-01   23209.47
1    Curly      Eggs          2019-04-02   67969.84 
2    Curly      SpamSpam      2019-04-03   19924.44
3    Curly      EggsEggs      2019-04-04   17005.59
4    Curly      EggsSpam      2019-04-06     328.06
5    Moe        Spam          2019-04-01   11750.58
6    Moe        Eggs          2019-04-02   12187.02
7    Moe        SpamSpam      2019-04-03    5003.66
8    Moe        EggsEggs      2019-04-04    6026.33
9    Moe        SpamEggs      2019-04-05   10344.57
10   Moe        EggsSpam      2019-04-06    1816.41
11   Larry      Spam          2019-04-01   11489.23
12   Larry      SpamSpam      2019-04-03    7915.24
13   Larry      EggsEggs      2019-04-04    5993.43
14   Larry      SpamEggs      2019-04-06     332.98



[In]:df[df.PIC.isnull()].groupby(['SO_DATE','SALES']).sum().unstack(fill_value=0).stack()
[Out] : 
                   PARENT_CATEGORY  PIC
SO_DATE    SALES                       
2019-04-02 332.5                 0    0
           851.5                 0    0
           2727.2                0    0
2019-04-03 332.5                 0    0
           851.5                 0    0
           2727.2                0    0
2019-04-05 332.5                 0    0
           851.5                 0    0
           2727.2                0    0


[In]: nopm = df[df.PIC.isnull()]
nopm.set_index('SO_DATE')['SALES'].resample('D').asfreq().fillna(0).reset_index()
[Out]:
 SO_DATE   SALES
0 2019-04-02   851.5
1 2019-04-03  2727.2
2 2019-04-04     0.0
3 2019-04-05   332.5


[In] : 

pd.DataFrame(index = new_index,columns ={'Curly':df[df['PIC']=='Curly'].groupby('SO_DATE')['SALES'].sum()})
[Out] :
           Curly
2019-04-01   NaN
2019-04-02   NaN
2019-04-03   NaN
2019-04-04   NaN
2019-04-05   NaN
2019-04-06   NaN

То, что я хочу, это либо

     PIC        PARENT_CATEGORY  SO_DATE      SALES
0    Curly      Spam          2019-04-01   23209.47
1    Curly      Eggs          2019-04-02   67969.84 
2    Curly      SpamSpam      2019-04-03   19924.44
3    Curly      EggsEggs      2019-04-04   17005.59
4    Curly      SpamEggs      2019-04-05       0.00
5    Curly      EggsSpam      2019-04-06     328.06
6    Moe        Spam          2019-04-01   11750.58
7    Moe        Eggs          2019-04-02   12187.02
8    Moe        SpamSpam      2019-04-03    5003.66
9    Moe        EggsEggs      2019-04-04    6026.33
10   Moe        SpamEggs      2019-04-05   10344.57
11   Moe        EggsSpam      2019-04-06    1816.41
12   Larry      Spam          2019-04-01   11489.23
13   Larry      Eggs          2019-04-02       0.00
14   Larry      SpamSpam      2019-04-03    7915.24
15   Larry      EggsEggs      2019-04-04    5993.43
16   Larry      SpamEggs      2019-04-05       0.00
17   Larry      EggsSpam      2019-04-06     332.98
18   NaN        Spam          2019-04-01       0.00
19   NaN        Eggs          2019-04-02      851.0
20   NaN        SpamSpam      2019-04-03     2727.2
21   NaN        EggsEggs      2019-04-04       0.00
22   NaN        SpamEggs      2019-04-05      332.5
23   Nan        EggsSpam      2019-04-06       0.00

Or
when doing a groupby for any PIC (including the NULL!) get this--
              SALES
 2019-04-01     0.0
 2019-04-02   851.0
 2019-04-03  2727.2
 2019-04-04     0.0
 2019-04-05   332.5
 2019-04-06     0.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...