Pandas невозможно отфильтровать строки по кварталам в указанном c году - PullRequest
0 голосов
/ 05 мая 2020

У меня есть набор данных, как показано ниже -

  Store   Date     Weekly_Sales         
0   1   2010-05-02  1643690.90  
1   1   2010-12-02  1641957.44  
2   1   2010-02-19  1611968.17  
3   1   2010-02-26  1409727.59  
4   1   2010-05-03  1554806.68

Всего в нем 100 магазинов. Я хочу отфильтровать данные 2012 года по кварталу

# Filter out only the data in 2012 from the dataset

import datetime as dt
df['Date'] = pd.to_datetime(df['Date'])
ds_2012 = df[df['Date'].dt.year == 2012]

# Calculate Q on the dataset
ds_2012 = ds_2012.sort_values(['Date'],ascending=True)
quarterly_sales = ds_2012.groupby(['Store', pd.Grouper(key='Date', freq='Q')])['Weekly_Sales'].sum()
quarterly_sales.head(20)

Полученный результат

Store     Date      
1      2012-03-31    18951097.69
       2012-06-30    21036965.58
       2012-09-30    18633209.98
       2012-12-31     9580784.77

Суммирование за 2 квартал (30.06.2012) и за 3 квартал (2012-09) -30) оба неверны при фильтрации в excel. Я новичок ie в Pandas

1 Ответ

0 голосов
/ 05 мая 2020

Вы можете groupby store и повторять выборку DataFrame ежеквартально:

import pandas as pd
df=pd.concat([pd.DataFrame({'Store':[i]*12, 'Date':pd.date_range(start='2020-01-01', periods=12, freq='M'), 'Sales':list(range(12))}) for i in [1,2]])
df.groupby('Store').resample('Q', on='Date').sum().drop('Store', axis=1)

                  Sales
Store Date             
1     2020-03-31      3
      2020-06-30     12
      2020-09-30     21
      2020-12-31     30
2     2020-03-31      3
      2020-06-30     12
      2020-09-30     21
      2020-12-31     30

Возможно, проверьте groupby и повторно выполните выборку документов .

...