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
在熊貓中是否有更習慣性的做法呢?熊貓重複的值
我想建立一個重複整數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
下面是更直接和更快捷的方式:
pd.DataFrame(np.tile(np.arange(1, 49), 2000 // 48 + 1)[:2000], columns=['HH'])
詳細步驟:
1
到48
的陣列(包括)>>> 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)
重複陣列A
N
倍,所以在這種情況下,你得到[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'])
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
。
很好的解釋。謝謝 –