[英]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
如果你有df1
和df2
,你可以簡單地使用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.