Итеративно извлекайте и добавляйте для создания новых списков с помощью панд

У меня есть список элементов mylist = [1, 2, 3, 4, 5, 6, 7, 8], и я хотел бы итеративно:

  1. скопируйте список
  2. вытолкнуть первый элемент скопированного списка
  3. и добавьте его в конец скопированного списка
  4. повторить это для следующего ряда и т. д.

Желаемый результат:

index   A   B   C   D   E   F   G   H
0       1   2   3   4   5   6   7   8
1       2   3   4   5   6   7   8   1
2       3   4   5   6   7   8   1   2
3       4   5   6   7   8   1   2   3
4       5   6   7   8   1   2   3   4
5       6   7   8   1   2   3   4   5
6       7   8   1   2   3   4   5   6
7       8   1   2   3   4   5   6   7

Я подозреваю, что необходим цикл for, но у меня возникают проблемы с итеративным созданием строк на основе предыдущей строки.

14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
Python PyPDF2 - запись метаданных PDF
Python PyPDF2 - запись метаданных PDF
Python скрипт, который будет записывать метаданные в PDF файл, для этого мы будем использовать PDF ридер из библиотеки PyPDF2 . PyPDF2 - это...
Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
Почему Python - идеальный выбор для проекта AI и ML
Почему Python - идеальный выбор для проекта AI и ML
Блог, которым поделился Harikrishna Kundariya в нашем сообществе Developer Nation Community.
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Анализ продукта магазина на Tokopedia
Анализ продукта магазина на Tokopedia
Tokopedia - это место, где продавцы могут продавать свои товары. Товар должен быть размещен на витрине, чтобы покупателям было легче найти товар...
0
0
58
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Я думаю slicing (Понимание нарезки) это то, что вы ищете:

next_iteration =  my_list[1:] + [my_list[0]]

и полный цикл:

output = []
for i in range(len(my_list)):
    output.append(my_list[i:] + my_list[:i])

Используйте это простое решение с rolls, созданным np.arange:

mylist = [1, 2, 3, 4, 5, 6, 7, 8]

a = np.array(mylist)
rolls = np.arange(0, -8, -1)
print (rolls)
[ 0 -1 -2 -3 -4 -5 -6 -7]

df = pd.DataFrame(a[(np.arange(len(a))[:,None]-rolls) % len(a)], 
                  columns=list('ABCDEFGH'))
print (df)
   A  B  C  D  E  F  G  H
0  1  2  3  4  5  6  7  8
1  2  3  4  5  6  7  8  1
2  3  4  5  6  7  8  1  2
3  4  5  6  7  8  1  2  3
4  5  6  7  8  1  2  3  4
5  6  7  8  1  2  3  4  5
6  7  8  1  2  3  4  5  6
7  8  1  2  3  4  5  6  7

Если необходимо решение цикла (медленное), используйте numpy.roll:

mylist = [1, 2, 3, 4, 5, 6, 7, 8]

rolls = np.arange(0, -8, -1)

df = pd.DataFrame([np.roll(mylist, i) for i in rolls], 
                  columns=list('ABCDEFGH'))
print (df)
   A  B  C  D  E  F  G  H
0  1  2  3  4  5  6  7  8
1  2  3  4  5  6  7  8  1
2  3  4  5  6  7  8  1  2
3  4  5  6  7  8  1  2  3
4  5  6  7  8  1  2  3  4
5  6  7  8  1  2  3  4  5
6  7  8  1  2  3  4  5  6
7  8  1  2  3  4  5  6  7

попробуй это:

mylist = [1, 2, 3, 4, 5, 6, 7, 8]
ar = np.roll(np.array(mylist), 1)
data = [ar := np.roll(ar, -1) for _ in range(ar.size)]
df = pd.DataFrame(data, columns=[*'ABCDEFGH'])
print(df)
>>>
   A  B  C  D  E  F  G  H
0  1  2  3  4  5  6  7  8
1  2  3  4  5  6  7  8  1
2  3  4  5  6  7  8  1  2
3  4  5  6  7  8  1  2  3
4  5  6  7  8  1  2  3  4
5  6  7  8  1  2  3  4  5
6  7  8  1  2  3  4  5  6
7  8  1  2  3  4  5  6  7

Решения Numpy кажутся действительно изящными. Но, тем не менее, вот решение, использующее cycle и islice от itertools:

from itertools import cycle, islice

mylist = [1, 2, 3, 4, 5, 6, 7, 8]

data, stop = cycle(mylist), len(mylist) + 1
df = pd.DataFrame({"A": mylist, **{c: islice(data, 1, stop) for c in "BCDEFGH"}})

Другие вопросы по теме