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

#python #pandas #numpy

#python #pandas #numpy

Вопрос:

Я хотел бы добавить столбец с повторяющимися значениями ряда в фрейм данных, при этом каждое значение в списке повторяется определенное количество раз, например:

    x   y  z
   0   2  1
   2  15  1
   0  10  2
   2  20  2
   0  30  3
   2  50  3
  

Где каждое значение в z повторяется дважды.

Пока у меня есть это, которое повторяет весь список, а не каждый элемент в списке заданное количество раз:

 data = [[0, 2], [2, 15], [0, 10], [2, 20], [0, 30], [2, 50]]
df1 = pd.DataFrame(data, columns = ['x', 'y'])

df1['z']=0
np.put(df1['z'], np.arange(len(df1)), [1, 2])
print(df1)
  

Результат:

 x   y  z
0   2  1
2  15  2
0  10  3
2  20  1
0  30  2
2  50  3
  

Как можно указать количество раз, чтобы повторить каждый элемент в списке, а не повторять весь список? Кроме того, в идеале было бы здорово, если бы решение можно было применять как к строкам, так и к целым числам, большое спасибо!

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

1. df1['z'] = np.tile(np.arange(len(df1)), 2) ?

Ответ №1:

Не уверен, отвечает ли это на ваш вопрос, но:

использование понимания списка

 ntimes = 2 # number of times you repeat each item
yourlist = [1,2,3]
df1['z'] = [i for i in yourlist for _ in range(ntimes)]
  

делает то, что вы ищете.

    x   y  z
0  0   2  1
1  2  15  1
2  0  10  2
3  2  20  2
4  0  30  3
5  2  50  3
  

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

1. есть идеи, почему я получаю ValueError: длина значений (3) не соответствует длине индекса (64776), когда я пытаюсь использовать этот код как есть? Я пытаюсь получить одни и те же 3 значения, которые будут повторяться снова и снова (как в строке 1 «X», строке 2 «y», строке 3 «z», строке 4 «X», строке 5 «y», строке 6 «z» И т. Д. И т. Д.?