Создайте столбец с периодически повторяющимися значениями в пандах - PullRequest
0 голосов
/ 27 августа 2018

У меня есть образец кадра данных 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, поэтому в окончательном фрейме данных будет точное заполнение. В общем, я знаю, как добавить столбец с конкретными значениями в кадре данных панд но я не знаю, как это сделать с повторяющимися значениями. Не могли бы вы предложить, как я могу сделать это в Python? Заранее спасибо за любую помощь

Ответы [ 3 ]

0 голосов
/ 27 августа 2018

Numpy бесплатно 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

Numpy Free v2

df.assign(ID=[x for x in id_list for _ in range(5)])
0 голосов
/ 27 августа 2018

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

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

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

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

0 голосов
/ 27 августа 2018

Есть функция от 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...