在python中重新排列列

2024-10-01 07:50:09 发布

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

我有一个105列的数据文件。我想把最后一列放在数据文件的中间。我怎样才能做到这一点。

col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15 

输出应该如下所示

col1 col2 col3 col4 col5 col6 col7 col15 col8 col9 col10 col11 col12 col13 col14

df.iloc[:,list(range(7))+ [-1]]

上面的代码适用于前7列和最后一列,但我在如何获取其余列上遇到了困难


Tags: 数据文件col2col3col1col4col5col7col6
2条回答

带有索引联合的一个:

df = pd.DataFrame(columns=range(16)).add_prefix('col')

mid = len(df.columns)//2
idx = df.columns[:mid].union(df.columns[[-1]]
                      .union(df.columns[mid:-1],sort=False),sort=False)
out = df[idx]

Empty DataFrame
Columns: [col0, col1, col2, col3, col4, col5, col6, col7, 
         col15, col8, col9, col10, col11, col12, col13, col14]
Index: []

pop+insert

import pandas as pd
df = pd.DataFrame({f'c{i}': [i] for i in range(1,16)})

cname = df.columns[-1]
df.insert(int(len(df.columns)/2), cname, df.pop(cname))

print(df)
#   c1  c2  c3  c4  c5  c6  c7  c15  c8  c9  c10  c11  c12  c13  c14
#0   1   2   3   4   5   6   7   15   8   9   10   11   12   13   14

np.r_

您可以创建一个用于切片的.iloc索引列表。对于列的数量是偶数还是奇数,需要进行一些数学处理

N = int(len(df.columns)/2)
r = len(df.columns)%2
idx = np.r_[0:N, -1, -N-r:-1]
#array([ 0,  1,  2,  3,  4,  5,  6, -1, -8, -7, -6, -5, -4, -3, -2])

df = df.iloc[:, idx]
#   c1  c2  c3  c4  c5  c6  c7  c15  c8  c9  c10  c11  c12  c13  c14
#0   1   2   3   4   5   6   7   15   8   9   10   11   12   13   14

相关问题 更多 >