在python pandas中重新排列列:把最后一列放在中间

xuo3flqw  于 2023-06-20  发布在  Python
关注(0)|答案(2)|浏览(128)

我有一个有105列的DataFrame。我想把最后一列放在DataFrame的中间。我怎么才能实现呢?

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列和最后一列,但我在如何获取其余列上遇到了困难

epfja78i

epfja78i1#

一个带索引联合的:

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: []
ru9i0ody

ru9i0ody2#

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

相关问题