第一个想法是使用列表理解并通过+ 加入列表:
expected_columns = ['cust_id','cost_id','sale_id','prod_id']
df = pd.DataFrame(columns=['customer_name','cust_id','sale_id','sale_time'])
expected_columns = ['cust_id','cost_id','sale_id','prod_id']
new1 = [c for c in df.columns if c in expected_columns]
new2 = [c for c in df.columns if c not in expected_columns]
new = new1 + new2
print (new)
['cust_id','sale_id','customer_name','sale_time']
或者使用Index.intersection 和Index.difference:
expected_columns = ['cust_id','cost_id','sale_id','prod_id']
new = (df.columns.intersection(expected_columns, sort=False).tolist() +
df.columns.difference(expected_columns, sort=False).tolist())
如果通过expected_columns 在输出中排序也很重要:
new = (pd.Index(expected_columns).intersection(df.columns, sort=False).tolist() +
df.columns.difference(expected_columns, sort=False).tolist())
差异改变样本数据:
expected_columns = ['sale_id','cost_id','cust_id','prod_id']
df = pd.DataFrame(columns=['customer_name','cust_id','sale_id','sale_time'])
new = (pd.Index(expected_columns).intersection(df.columns, sort=False).tolist() +
df.columns.difference(expected_columns, sort=False).tolist())
print (new)
['sale_id', 'cust_id', 'customer_name', 'sale_time']
new = (df.columns.intersection(expected_columns, sort=False).tolist() +
df.columns.difference(expected_columns, sort=False).tolist())
print (new)
['cust_id', 'sale_id', 'customer_name', 'sale_time']
最后更改列使用顺序:
df = df[new]