从旧开始创造新Pandasdf

2024-10-02 00:36:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧数据,想在末尾附加另一个。新的数据帧与前一个类似,只是交换了条目。我有以下代码可以工作并说明我在做什么:

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个条目的数据帧)。 特别是,如何使交换更有效?在

更新: 使用其中一个答案,我现在可以:

^{pr2}$

其中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

Tags: 数据inrightfordatarangeleftlength
2条回答

这是我最后所做的,多亏了他们的回答和评论:

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

如果您有df1df2,那么您可以简单地使用pd.concat来添加df2前五行,与列的顺序无关:

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

相关问题 更多 >

    热门问题