У меня есть следующие данные:
df1 = pd.DataFrame({'AIRPORT': ['ORD','ORD','ORD','ORD','ORD','DCA','DCA','DCA','DCA','DCA','DCA','DCA'],
'MONTH': [3,4,5,6,7,1,2,3,4,5,6,7],
'VOLUME': [200, 500, 600, 900, 400, 44, 55, 66, 77, 88, 99, 77],
'MULT': [2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 7, 8]})
Содержит две группы аэропортов ORD и DCA.
По группам и только для не первой строки групп я хочу создать три новые переменные:
TRY1 : это предыдущие месяцы VOLUME / предыдущие месяцы MULT
Выяснено решение:
# TRY1
df['MULTIPLY'] = df['VOLUME']/df['MULT']
df['TRY1'] = df.groupby(['AIRPORT'])['MULTIPLY'].shift(1)
TRY2 : Это накопленная сумма ОБЪЕМА за последние 2 месяца и ОБЪЕМА текущего месяца, если МЕСЯЦ> = 6 Вычислено решение:
# TRY2
df['TRY2'] = \
np.where( df['MONTH'] >= 6
,pd.rolling_sum(df['VOLUME'], window=3).fillna(0)
,np.nan)
TRY3 : Это предыдущие месяцы ОБЪЕМ * текущие месяцы MULT
Выяснилось Решение:
# TRY3
df['TRY3'] = df.groupby(['AIRPORT'])['VOLUME'].shift(1) * df['MULT']
Данные о результатах:
AIRPORT MONTH VOLUME MULT TRY1 TRY2 TRY3
ORD 3 200 2
ORD 4 500 3 100.0(200/2) 600(200*3)
ORD 5 600 4 166.7(500/3) 2000(500*4)
ORD 6 900 5 150.0(600/4) 2000(500+600+900) 3000(600*5)
ORD 7 400 6 180.0(900/5) 1900(600+900+400) 5400(900*6)
DCA 1 44 2
DCA 2 55 3 22.0(44/2) 132
DCA 3 66 4 18.3(55/3) 220
DCA 4 77 5 16.5(66/4) 330
DCA 5 88 6 15.4(77/5) 462
DCA 6 99 7 14.7(88/6) 264 (77+88+99) 616
DCA 7 77 8 14.1(99/7) 264 (88+99+77) 792
Любые идеи будут высоко оценены. Спасибо.