我有以下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)
如何将列的意思移到前面,即将其设置为第一列,而其他列的顺序保持不变?
当前回答
我想到了和Dmitriy Work一样的答案,显然是最简单的:
df["mean"] = df.mean(1)
l = list(np.arange(0,len(df.columns) -1 ))
l.insert(0,-1)
df.iloc[:,l]
其他回答
使用T怎么样?
df = df.T.reindex(['mean', 0, 1, 2, 3, 4]).T
我自己也遇到了一个类似的问题,只是想补充一下我已经解决的问题。我喜欢用于更改列顺序的reindex_axis()方法。这是有效的:
df = df.reindex_axis(['mean'] + list(df.columns[:-1]), axis=1)
另一种基于@Jorge评论的方法:
df = df.reindex(columns=['mean'] + list(df.columns[:-1]))
虽然reindex_axis在微基准测试中似乎比reindex稍快,但我认为我更喜欢后者,因为它的直接性。
简单地说,
df = df[['mean'] + df.columns[:-1].tolist()]
另一种选择是使用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。
这里有一种移动一个现有列的方法,它将修改现有的数据帧。
my_column = df.pop('column name')
df.insert(3, my_column.name, my_column) # Is in-place