Сравнить месяц продаж с месяцем в Python? - PullRequest
0 голосов
/ 20 марта 2020

df

  Food_Id    Month_yr       Qty   Sales
0     1       November_18     5    1920
1     2       November_18     6    2850
2     2       November_18     8    3852
3     1       November_18     6    1920
4     2       November_18     7    2650
5     1       November_18     2    3952
6     1       November_18     3    1320
7     2       November_18     8    2650
8     1       November_18     9    3152
9     1       December_18     5    1920
10    2       December_18     6    2150
11    2       December_18     8    3852
13    1       December_18     6    4920
14    2       December_18     6    3690
15    2       December_18     2    8952
16    1       December_18     7    7340
17    1       December_18     4    3650
18    2       December_18     9    8152
19    1       January_19      5    1920
20    2       January_19      6    8150
21    2       January_19      8    3852
22    1       January_19      1    3920
23    2       January_19      3    2690
24    2       January_19      2    8952
25    1       January_19      2    7340
26    1       January_19      4    5630
27    2       January_19      7    6152

У меня есть большой набор данных размером около 2 ГБ, мне нужно лишь сравнивать продажи каждого food_id каждый месяц. если разница продаж составляет 1000 для определенного идентификатора еды с этого месяца до следующего месяца, отметьте этот месяц.

Вывод

   Food_Id    Month_yr      Sales   diff_frm_lst_month  Flag
0    1        November_18   12264      Null             Null
1    2        November_18   12002      Null             Null
2    1        December_18   17830      5566            more than 1000
3    2        December_18   26794      14792           more than 1000
4    1        January_18    18800      970             less than 1000
5    2        January_18    29796      3002            more than 1000

, поскольку данные велики, пожалуйста, укажите, как обращаться с тяжелыми данные.

1 Ответ

1 голос
/ 20 марта 2020

Сначала при необходимости преобразуйте столбец в datetime по to_datetime и сортируйте по DataFrame.sort_values:

df['date'] = pd.to_datetime(df['Month_yr'], format='%B_%y')
df = df.sort_values(['date'])

Затем агрегируйте sum и получите разницу для групп по DataFrameGroupBy.diff и последний набор Flag столбец по numpy.select:

df = df.groupby(['Food_Id','Month_yr'], sort=False, as_index=False)['Sales'].sum()
df['diff_frm_lst_month'] = df.groupby('Food_Id')['Sales'].diff()

masks = [df['diff_frm_lst_month'] > 1000, df['diff_frm_lst_month'] < 1000]
vals = ['more than 1000','less than 1000']
df['Flag'] = np.select(masks, vals, np.nan)

print (df)
   Food_Id     Month_yr  Sales  diff_frm_lst_month            Flag
0        1  November_18  12264                 NaN             nan
1        2  November_18  12002                 NaN             nan
2        1  December_18  17830              5566.0  more than 1000
3        2  December_18  26796             14794.0  more than 1000
4        1   January_19  18810               980.0  less than 1000
5        2   January_19  29796              3000.0  more than 1000
...