簡體   English   中英

從舊熊貓創建新熊貓 df

[英]Creating new pandas df from old one

我有一個數據框數據,並想在最后附加另一個。 新的數據幀與前一個類似,只是交換了條目。 我有以下代碼可以工作並說明我在做什么:

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

在這個例子中,我只在最后添加前 5 行,並交換列。 這根本不能很好地擴展,而且效率非常低。 您能否幫助提高效率,消除循環並使其擴展良好(我想使用具有 10000 個條目的數據框)。 特別是,我怎樣才能使交換更有效率?

更新:使用其中一個答案,我現在可以:

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

其中 listL 是原始 df 數據中的行數。 我需要優化第二部分:

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

如果你有df1df2 ,你可以簡單地使用pd.concat添加df2前五行,獨立於列的排序方式:

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

這就是我最終做的,感謝收到的答案和評論:

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])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM