2016-03-27 14 views
1

Bir veri çerçeve verisine sahibim ve sonunda bir tane daha eklemek istiyorum. Yeni dataframe bir öncekine benzer, sadece girişler değiştirildi. Aşağıdaki çalışır ve ne yaptığımı göstermektedir kodu vardır: Ben sonunda sadece ilk 5 satır ekliyorum Bu örnekteEski bir pandadan yeni pandalar oluşturma

listL = data.shape[0] 
length = data.shape[1] 
mid = (length-1)/2.0 
for j in range(0, 5) : 
    data.loc[listL+j] = data.iloc[j] 

for j in range(0, 5) : 
    for i in range(start, end) : 
     left = int(ceil(mid+i)) + 1 
     right = int(ceil(mid-i)) 
     data.iloc[listL+j][left] = data.iloc[j][right] 
     data.iloc[listL+j][0] = data.iloc[j][0] + 10 

ve sütunları takas. Bu hiç de iyi ölçeklenmez ve çok verimsizdir. Bunu daha verimli hale getirmenize, döngüyü ortadan kaldırmanıza ve iyi ölçeklendirmenize yardımcı olabilir misiniz (10000'lü girişleri olan veri tabanlarıyla çalışmak istiyorum). Özellikle, takas işlemini nasıl daha verimli hale getirebilirim?

Güncelleme: cevaplar birini kullanarak , şimdi yapabilirsiniz:

listL orijinal df verilerin satır sayısıdır
tmpdf = data 
data = pandas.concat([data, tmpdf]) 

for j in range(0, listL-1) : 
    for i in range(start, end) : 
     left = int(ceil(mid+i)) + 1 
     right = int(ceil(mid-i)) 
     data.iloc[listL+j][left] = data.iloc[listL+j][right] 
     data.iloc[listL+j][0] = data.iloc[listL+j][0] + 10 

. Eğer df1 ve df2 varsa

listL = data.shape[0] 
length = data.shape[1] 
mid = (length-1)/2.0 
for j in range(0, listL-1) : 
    for i in range(start, end) : 
     left = int(ceil(mid+i)) + 1 
     right = int(ceil(mid-i)) 
     data.iloc[listL+j][left] = data.iloc[listL+j][right] 
     data.iloc[listL+j][0] = data.iloc[listL+j][0] + 10 
+1

Örnek veri çerçeveleri ve istenen bir çıktı gönderir misiniz? Bu size yardım etmeyi kolaylaştıracak. Ikinci bölüm için –

+0

sadece veri yapmak [data.columns [: mid] .tolist() + data.columns [(orta + 1):] tolist()] ' –

+0

@JoeR Kod hepsi burada. Veri ver = [x, 1, 2, 3], yeni df = [[x, 1, 2, 3], [x + 10, 3,2,1]] oluşturmak istiyorum, yani iki katına çıkıyorum satırlar, ilk değer 10 artırılır, diğer her şey orta sütuna yansıtılır. – user

cevap

1

, sadece İndependantly sütunlar sıralanır nasıl, df2 ilk beş satır eklemek için pd.concat kullanabilirsiniz::

pd.concat([df1, df2.ix[:4,]]) 
0

budur ben ikinci bölümünü optimize etmek gerek ne yaptım, cevaplar ve alınan yorumlar sayesinde:

length = data.shape[1]  
mid = (length-1)/2.0 

start = -int(floor(mid)) 
end = int(floor(mid)) 

#for j in range(0, 5) : 
# data.loc[listL+j] = data.iloc[j] 

tmpdf = data.copy(deep=True) 
for i in range(start, end) : 
    left = int(ceil(mid+i)) + 1 
    right = int(ceil(mid-i)) 
    tmpdf[data.columns[left]] = data[data.columns[right]] 

data = pandas.concat([data, tmpdf]) 
İlgili konular