как получить список предыдущих n значений столбца в новом столбце текущей строки?

#python #python-3.x #pandas

Вопрос:

Мой фрейм данных панд выглядит следующим образом:

 Index   Score
1       15.5
2       0.0
3       15.5
4       30.0
5       17.5
 

Я хочу получить предыдущие 3 балла в виде списка в новой колонке, как показано ниже

 Index   Score   Pre_Scr
1       15      []
2       0       [15]
3       18      [0,15]
4       30      [18,0,15]
5       17      [30,18,0]
5       5       [17,30,18]
 

Я пытался

 [x.values.tolist() for x in v.rolling(3)]
 

Но это возвращает список, включающий текущее значение. Как мне получить его в вышеуказанном ожидаемом формате для каждой записи?

Ответ №1:

Если вы просто хотите удалить последнее значение, почему бы не сделать это, чтобы удалить текущее значение:

 [x.values.tolist()[:-1] for x in v.rolling(4)]
 

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

1. Простой. Спасибо.

2. Есть идеи, как свернуть условно? Например, в приведенном выше случае сверните его на основе столбца индекса. Нечетные строки отдельно четные строки отдельно?

Ответ №2:

Если я правильно понял ваши переменные, вы можете сделать это следующим образом:

  [[y for y in x.values.tolist() if y != v_no] for x, v_no in zip(v.rolling(4), v.values) ]
 

или, возможно (как только это будет реализовано для типов данных, не связанных с временем):

  [x.values.tolist() for xin v.rolling(4, closed='left')]
 

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

1. @scophros, я обновил свой вопрос. это x в v, а не xin. Извините за путаницу.

2. И я обновил свой. Однако, похоже, что у @Shubham Lohiya получилось проще.

3. @scophros Спасибо. Есть идеи, как свернуть условно? Например, в приведенном выше случае сверните его на основе столбца индекса. Нечетные строки отдельно четные строки отдельно?

4. Вы можете использовать индексирование — используйте вдвое более длинное скользящее окно, а затем примените нечетную индексацию: list[::2] или list[1::2]

5. Извините. Мой вопрос касался не только четного или нечетного. В общем, как мне сгруппировать записи на основе другого столбца.