如何根据另一DataFrame的列值重排目标DataFrame的列顺序?
调整DataFrame列顺序匹配数据字典变量顺序
问题描述
现有DataFrame df:
| alpha | romeo | beta | carlos | bumblebee |
|---|---|---|---|---|
| alpha值1 | romeo值1 | beta值1 | carlos值1 | bumblebee值1 |
| alpha值2 | romeo值2 | beta值2 | carlos值2 | bumblebee值2 |
另有数据字典data_dict(DataFrame格式):
| VariableName | column2 | column3 |
|---|---|---|
| alpha | 某值 | 某值 |
| carlos | 某值 | 某值 |
| romeo | 某值 | 某值 |
| beta | 某值 | 某值 |
| bumblebee | 某值 | 某值 |
需要将df的列顺序调整为与data_dict中VariableName列的条目顺序一致,预期结果:
| alpha | carlos | romeo | beta | bumblebee |
|---|---|---|---|---|
| alpha值1 | carlos值1 | romeo值1 | beta值1 | bumblebee值1 |
| alpha值2 | carlos值2 | romeo值2 | beta值2 | bumblebee值2 |
解决方案
核心方法
提取data_dict的VariableName列值作为目标列顺序,直接重新索引df即可:
# 获取目标列顺序列表 target_column_order = data_dict['VariableName'].tolist() # 按目标顺序重新排列df的列 df = df[target_column_order]
可选异常处理
如果VariableName中存在df没有的列名,可先过滤出匹配的列,避免索引报错:
# 过滤出同时存在于df列名和VariableName中的列 target_column_order = [col for col in data_dict['VariableName'].tolist() if col in df.columns] df = df[target_column_order]
内容的提问来源于stack exchange,提问作者user123
相关产品推荐
相关产品推荐

