Question:调换column到想要的位置
"""以如下DataFrame为例"""
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.rand(10, 5), columns=['a', 'b', 'c', 'd', 'e'])
df['mean'] = df.mean(1) # 即 df.mean(axis=1),计算columns的均值
print(df)
我知道df['mean'] = df.mean(1)
可以加上平均值列(函数pandas.DataFrame.mean链接)。但是如果我想把mean
列放到第1列,或者c
列的位置(即第3列)怎么做呢?
Answer 1 使用list.insert()
""" 目标:把"mean"放到第一列"""
cols = df.columns.tolist() # 把df的列名称,取出来放到一个list里边。即返回['a', 'b', 'c', 'd', 'e', 'mean']
cols.insert(0, cols.pop(cols.index('mean'))) # pop()把mean从cols列表里挖出来,通过位置参数“0”,然后放到第一列。
df_final = df[cols] # df按照cols序列,把mean字段放到了第一列
print(df_final)
# 结果如下
mean a b c d e
0 0.507075 0.263543 0.537802 0.441994 0.821771 0.470263
1 0.471259 0.441606 0.666618 0.288648 0.126873 0.832552
2 0.416545 0.475424 0.246417 0.182164 0.453856 0.724866
3 0.688879 0.773911 0.625324 0.719911 0.819626 0.505623
4 0.682245 0.109669 0.895214 0.887555 0.941115 0.577671
5 0.424046 0.272191 0.608281 0.425871 0.710838 0.103048
6 0.661013 0.874205 0.600051 0.983872 0.431361 0.415577
7 0.605521 0.734624 0.543319 0.402324 0.472205 0.875135
8 0.570878 0.112548 0.937914 0.333734 0.810133 0.660061
9 0.326754 0.196427 0.012119 0.224301 0.921659 0.279263
Answer 2,即Answer1的更进一步
因为:
cols = df.columns.tolist()
a = cols.index('mean')
等价于
a = df.columns.get_loc('mean')
# 与之对应的还有Index的操作: df.index.get_loc(‘index_name’)
所以:
cols.insert(cols.index('c'), cols.pop(cols.index('mean'))) # cols.index('c')返回'c'在cols的位置信息,
df_final = df[cols]
# 结果如下
a b mean c d e
0 0.860127 0.726879 0.666938 0.934172 0.070063 0.743448
1 0.968780 0.480477 0.545988 0.808154 0.100302 0.372227
2 0.862920 0.808950 0.641398 0.125624 0.478846 0.930653
3 0.580197 0.503121 0.320077 0.325538 0.071035 0.120495
4 0.745048 0.787395 0.554878 0.726347 0.078876 0.436725
5 0.370106 0.220008 0.403898 0.296168 0.647584 0.485626
6 0.966086 0.307910 0.677990 0.671499 0.980961 0.463494
7 0.586902 0.888019 0.709354 0.869333 0.271431 0.931085
8 0.170236 0.941333 0.676650 0.862466 0.502819 0.906397
9 0.447175 0.547105 0.399189 0.284198 0.518901 0.198565
附注:
- 获取更多的答案:stackoverflow原文链接;
- Python List insert()
list.insert(
index, # int数值,指定我们要插入的列位置
element) # 要插入的元素
DataFrame.insert(
loc, # int数值,指定我们要插入的列位置
column, # 设定要插入列的名称
value, # 要插入列的值
allow_duplicates=False) # 如果我们起的列名称在df里边已经被占用了,是否允许重名的现象存在。默认不可以。