熊猫重复价值观

时间:2016-07-27 09:04:06

标签: python pandas dataframe

在熊猫中有更多惯用的方法吗?

我想设置一个重复整数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

2 个答案:

答案 0 :(得分:3)

这是更直接,更快捷的方式:

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

详细步骤:

  1. np.arange(1, 49)创建一个从148(包含)的数组
  2. >>> 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])
    
    1. np.tile(A, N)重复数组A N次,因此在这种情况下,您获得[1 2 3 ... 48 1 2 3 ... 48 ... 1 2 3 ... 48]。您应该重复数组2000 // 48 + 1次以获得至少2000个值。
    2. >>> 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,)
      
      1. [:2000]从生成的数组中检索2000个第一个值,以创建DataFrame
      2. >>> d = pd.DataFrame(r[:2000], columns=['HH'])
        

答案 1 :(得分: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