我有以下DataFrame(df):
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.rand(10, 5))
我通过分配添加更多列:
df['mean'] = df.mean(1)
如何将列的意思移到前面,即将其设置为第一列,而其他列的顺序保持不变?
我有以下DataFrame(df):
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.rand(10, 5))
我通过分配添加更多列:
df['mean'] = df.mean(1)
如何将列的意思移到前面,即将其设置为第一列,而其他列的顺序保持不变?
当前回答
这里有一种移动一个现有列的方法,它将修改现有的数据帧。
my_column = df.pop('column name')
df.insert(3, my_column.name, my_column) # Is in-place
其他回答
这里有一种移动一个现有列的方法,它将修改现有的数据帧。
my_column = df.pop('column name')
df.insert(3, my_column.name, my_column) # Is in-place
你也可以这样做:
df = df[['mean', '0', '1', '2', '3']]
您可以通过以下方式获取列列表:
cols = list(df.columns.values)
输出将产生:
['0', '1', '2', '3', 'mean']
…然后,在将其放入第一个函数之前,可以手动重新排列
另一种选择是使用set_index()方法,后跟reset_index()。请注意,我们首先pop()将要移动到数据帧前面的列,以便在重置索引时避免名称冲突:
df.set_index(df.pop('column_name'), inplace=True)
df.reset_index(inplace=True)
有关详细信息,请参阅How to change the order of dataframe columns in panda。
对我来说,一个非常简单的解决方案是在df.columns上使用.rendex:
df = df[df.columns.reindex(['mean', 0, 1, 2, 3, 4])[0]]
只需键入要更改的列名,然后为新位置设置索引。
def change_column_order(df, col_name, index):
cols = df.columns.tolist()
cols.remove(col_name)
cols.insert(index, col_name)
return df[cols]
对于您的情况,这将是:
df = change_column_order(df, 'mean', 0)