Pandas选择列开始排序,其余保持不变

00jrzges  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(170)

例如,我有一个包含许多列的 Dataframe ,列数不清楚,例如,在10到20之间。
中的列名如下:
RecordID, price, company, date, feature1, return, some_inf, feature2, feature3, ...
样本数据:

column_names = ["RecordID", "price", "company", "date", "feature1", "return", "some_inf", "feature2", "feature3"]
values = [1, 9.99, "ABC", 20230101, 888, 0.666, "happy_everyday", "helloworld", "test"]
df = pd.DataFrame(values).T
df.columns = column_names

在所有这些列中,我想挑出一些列(如果存在的话)放在最前面,其余的列顺序不变,例如,我想选择date, volume, price, return
则输出(包含重新排序的列)将为
date, price, return, RecordID, company, feature1, some_inf, feature2, feature3, ...
volume列不存在于原始 Dataframe 中,因此它也不应出现在最终输出中。即,输出 Dataframe 应具有选择列表中的前几列(如果它们也在原始 Dataframe 中),然后是不在此列表中的列,顺序不变。
有什么快速实现的方法吗?

w46czmvw

w46czmvw1#

对所有列使用Index.intersection,以Index.append开始,按Index.difference中的列:

cols = ['date', 'volume', 'price', 'return']
new = (pd.Index(cols).intersection(df.columns, sort=False)
         .append(df.columns.difference(cols, sort=False)))
df = df[new]
print (df)
       date price return RecordID company feature1        some_inf  \
0  20230101  9.99  0.666        1     ABC      888  happy_everyday   

     feature2 feature3  
0  helloworld     test

相关问题