Pandas сдвигает базу на комбинацию нескольких столбцов

#python #pandas

#python #pandas

Вопрос:

У меня есть DF следующим образом:

месяц shop_id item_id продажи
1 0 19 1
1 0 27 1
2 1 19 2
2 1 27 2

Я хочу использовать shift() так, чтобы новый столбец представлял собой комбинацию shop_id и item_id из предыдущего месяца. Это желаемый результат:

месяц shop_id item_id продажи last_month_sale
1 0 19 1 NaN
1 0 27 1 NaN
2 1 19 2 1
2 1 27 2 1

Все руководства, которые я вижу, просто сдвигаются по строкам, а не на основе какого-либо столбца. Как я могу это сделать?

Комментарии:

1. df.groupby(['shop_id','item_id'])['sales'].shift()

Ответ №1:

Сначала измените значения на DataFrame.pivot , сдвиньте, измените обратно и добавьте новый столбец к исходному на DataFrame.join :

 s = df.pivot(['month','shop_id'],'item_id', 'sales').shift().stack().rename('last_month_sale')
df = df.join(s, on=['month','shop_id','item_id'])
print (df)
   month  shop_id  item_id  sales  last_month_sale
0      1        0       19      1              NaN
1      1        0       27      1              NaN
2      2        1       19      2              1.0
3      2        1       27      2              1.0
 

Ответ №2:

Попробуйте что-то новое drop_duplicates с reindex

 df['new'] = df.drop_duplicates(['month','shop_id']).sales.shift().reindex(df.index,method = 'ffill')
Out[31]: 
0    NaN
1    NaN
2    1.0
3    1.0
Name: sales, dtype: float64