我有一个数据帧数据,并希望在最后添加另一个数据。新数据帧与前一个数据帧类似,只交换条目。我有以下代码可以工作并说明我在做什么:
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
答案 0 :(得分:1)
如果您有df1
和df2
,则只需使用pd.concat
添加df2
前五行,与列的排序方式无关:
pd.concat([df1, df2.ix[:4,]])
答案 1 :(得分:0)
这是我最终做的,感谢收到的答案和评论:
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])