#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. Извините. Мой вопрос касался не только четного или нечетного. В общем, как мне сгруппировать записи на основе другого столбца.