2016-07-27 149 views
0

在熊猫中是否有更习惯性的做法呢?熊猫重复的值

我想建立一个重复整数1到48个列中,长度2000的索引:

df = pd.DataFrame(np.zeros((2000, 1)), columns=['HH']) 
h = 1 

for i in range(0,2000) : 
    df.loc[i,'HH'] = h 
    if h >=48 : h =1 
    else : h += 1 

回答

3

下面是更直接和更快捷的方式:

pd.DataFrame(np.tile(np.arange(1, 49), 2000 // 48 + 1)[:2000], columns=['HH']) 

详细步骤:

  1. ​​353 210创建从148的阵列(包括)
>>> l = np.arange(1, 49) 
>>> l 
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 
     18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 
     35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48]) 
  • np.tile(A, N)重复阵列AN倍,所以在这种情况下,你得到[1 2 3 ... 48 1 2 3 ... 48 ... 1 2 3 ... 48]。您应该重复2000 // 48 + 1次数组以获得至少2000个值。
  • >>> r = np.tile(l, 2000 // 48 + 1) 
    >>> r 
    array([ 1, 2, 3, ..., 46, 47, 48]) 
    >>> r.shape # The array is slightly larger than 2000 
    (2016,) 
    
  • [:2000]从所生成的阵列检索2000的第一值来创建DataFrame
  • >>> d = pd.DataFrame(r[:2000], columns=['HH']) 
    
    +0

    很好的解释。谢谢 –

    0
    df = pd.DataFrame({'HH':np.append(np.tile(range(1,49),int(2000/48)), range(1,np.mod(2000,48)+1))}) 
    

    即,追加2个数组:

    (1)np.tile(range(1,49),int(2000/48))

    len(np.tile(range(1,49),int(2000/48))) 
    1968 
    

    (2)range(1,np.mod(2000,48)+1)

    len(range(1,np.mod(2000,48)+1)) 
    32 
    

    并从相应的字典构造DataFrame