创建一个在熊猫中具有定期重复值的列

时间:2018-08-27 16:58:21

标签: python pandas

我有一个带有一列的示例数据帧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种不同id类型的列表。我想在数据框中创建一个新列,其中前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中做到这一点吗? 预先感谢您的帮助

3 个答案:

答案 0 :(得分:4)

numpyrepeat

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

答案 1 :(得分:2)

Numpy free v1

let myData = [];
for(let index in data) {
  myData.push(data[index]);
}

Numpy free v2

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

答案 2 :(得分:1)

我建议这样的事情,它利用python所做的v_ref扩展:

[item]*n => [item, item, item, ...]

然后您可以将列添加到数据框中。