У меня есть образец данных df с одним столбцом:
Cost
30
49
98
10
37
20
10
48
70
20
30
40
50
29
90
39
30
29
50
40
и список: id_list = ["A","B","C","D"]
который является списком с 4 различными типами идентификаторов. Я хотел бы создать новый столбец в фрейме данных, где первые 5 значений стоимости будут "A", следующие 5 значений стоимости будут "B".... и последние 5 значений стоимости будут "D". Поэтому я хочу повторить элементы id_list 5 раз, и мой новый df будет выглядеть следующим образом:
Cost ID
30 A
49 A
98 A
10 A
37 A
20 B
10 B
48 B
70 B
20 B
30 C
40 C
50 C
29 C
90 C
39 D
30 D
29 D
50 D
40 D
В моем фактическом фрейме данных много строк, а фактический id_list имеет много элементов. Число строк кратно 5, поэтому в конечном кадре данных будет точное заполнение. В общем, я знаю, как добавить столбец со специфическими значениями в кадре данных pandas, но я не знаю, как это сделать с повторяющимися значениями. Не могли бы вы предложить, как я могу это сделать в python? Заранее благодарю за любую помощь
Существует функция из numpy
, repeat
df['New']=np.repeat(id_list,5)
df
Out[23]:
Cost New
0 30 A
1 49 A
2 98 A
3 10 A
4 37 A
5 20 B
6 10 B
7 48 B
8 70 B
9 20 B
10 30 C
11 40 C
12 50 C
13 29 C
14 90 C
15 39 D
16 30 D
17 29 D
18 50 D
19 40 D
df.assign(ID=sum(zip(*[id_list] * 5), tuple()))
Cost ID
0 30 A
1 49 A
2 98 A
3 10 A
4 37 A
5 20 B
6 10 B
7 48 B
8 70 B
9 20 B
10 30 C
11 40 C
12 50 C
13 29 C
14 90 C
15 39 D
16 30 D
17 29 D
18 50 D
19 40 D
df.assign(ID=[x for x in id_list for _ in range(5)])
Я бы предложил что-то вроде этого, которое использует преимущество [item]*n => [item, item, item,...]
которое делает python:
labels = ['label1', 'label2', 'label3']
num = 5
repeated = []
for i in labels:
repeated.extend([i]*num)
Затем вы можете добавить столбец в свой фрейм.