У меня есть датафрейм df
, содержащий информацию о транзакции между двумя компаниями и времени.Я должен group-by
каждые 3 месяца и сравнивать с другими 3 месяцами плюс 1. Например, мне нужно сгруппировать октябрь 2015 года, ноябрь 2015 года, декабрь 2015 года и сравнить их с ноябрем 2015 года, декабрем 2015 года, январем 2016 года. Итак,Я должен сгруппировать месяцы [201510, 201511, 201512]
и сравнить их с [201511, 201512, 201601]
. Фрейм данных выглядит следующим образом:
A B YM tot
0 494 6.83353e+07 201507 136388.22
1 1150 6.78366e+07 201507 68972.76
2 1575 6.96231e+07 201507 43447.37
3 3459 1.70194e+07 201507 298173.15
4 8591 5.40416e+07 201507 51255.22
5 17350 1.79459e+07 201507 24400.00
6 24685 1.7862e+07 201507 67631.19
7 28157 1.79105e+07 201507 20241.00
8 47963 2.73774e+07 201507 30000.00
times = pd.unique(df['YM']) ## months we consider
times:
array([201507, 201508, 201509, 201510, 201511, 201512, 201601, 201602,
201603, 201604, 201605, 201606, 201607, 201608, 201609, 201610,
201611, 201612, 201701, 201702, 201703, 201704, 201705, 201706,
201707, 201708, 201709, 201710, 201711, 201712])
вот что я делаю:
k = 0
v = 3
for i in range(0, len(times)-3)
## First Time Window
tmp = df[(df['YM'] >= times[k]) & (df['YM'] <= times[v])]
net1 = net1.groupby(['A','B'], as_index = False)['tot'].sum()
## Second Time Window
tmp = df[(df['YM'] >= times[k+1]) & (df['YM'] <= times[v+1])]
net2 = net2.groupby(['A','B'], as_index = False)['tot'].sum()
k += 1 ## Update Time windows
v += 1
Я хотел бы знать, есть ли более эффективный способ сделать это.