Группировка и сдвиг на основе значений столбца

#python #pandas

#python #pandas

Вопрос:

Давайте предположим, что у меня есть следующий набор данных:

 Stock_id    Week    Stock_value
1   1   2
1   2   4
1   4   7
1   5   1
2   3   8
2   4   6
2   5   5
2   6   3
  

Я хочу сдвинуть значения Stock_value столбца, но только на последовательные недели.

Это должно привести к следующему результату:

 Stock_id    Week    Stock_value
1   1   NA
1   2   2
1   4   NA
1   5   7
2   3   NA
2   4   8
2   5   6
2   6   5
  

Так, например, в хранилище 1 значение Stock_value недели 2 не должно быть перенесено на неделю 4 (поскольку сейчас я хочу сдвиг на одну неделю).

Как я могу это легко сделать?

Ответ №1:

IIUC, используя week с его diff помощью, создает другой групповой ключ

 df.groupby([df.Stock_id,df.Week.diff().ne(1).cumsum()]).Stock_value.shift()
Out[157]: 
0    NaN
1    2.0
2    NaN
3    7.0
4    NaN
5    8.0
6    6.0
7    5.0
Name: Stock_value, dtype: float64
#df['Stock_value2']=    df.groupby([df.Stock_id,df.Week.diff().ne(1).cumsum()]).Stock_value.shift()
  

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

1. Спасибо за ответ (голосуем за). Я думаю, это должно сработать. Я хотел бы немного понять, зачем использовать .cumsum() .