Создайте столбец с периодически повторяющимися значениями в пандах

1

У меня есть образец данных 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? Заранее благодарю за любую помощь

Теги:
pandas

3 ответа

4
Лучший ответ

Существует функция из 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
2

Нетронутый v1

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

Нет свободных номеров v2

df.assign(ID=[x for x in id_list for _ in range(5)])
1

Я бы предложил что-то вроде этого, которое использует преимущество [item]*n => [item, item, item,...] которое делает python:

labels = ['label1', 'label2', 'label3']
num = 5

repeated = []
for i in labels:
    repeated.extend([i]*num)

Затем вы можете добавить столбец в свой фрейм.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню