#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» И т. Д. И т. Д.?