如何按指定顺序重新排列列表中的DataFrame?
调整列表中DataFrame的顺序
假设你的lbsl_lst已包含目标的4个DataFrame,仅顺序不符合要求,可通过以下方式调整:
方法1:已知原列表索引
若清楚每个目标DataFrame在原lbsl_lst中的位置,直接按需求重新构造列表即可。比如原列表中:
- JP002A-0002在索引1
- JP002A-0003在索引2
- JP007A-0001在索引0
- JP002A-0001在索引3
执行代码:
lbsl_lst = [ lbsl_lst[1], # JP002A-0002 lbsl_lst[2], # JP002A-0003 lbsl_lst[0], # JP007A-0001 lbsl_lst[3] # JP002A-0001 ]
此时lbsl_lst[2]对应JP007A-0001。若需lbsl_lst[3]对应它,只需调整目标顺序为[JP002A-0002, JP002A-0003, JP002A-0001, JP007A-0001]后重新构造列表。
方法2:按DataFrame标识匹配排序
若不知道原索引,但每个DataFrame有唯一标识(如name属性或专属标识列),可通过匹配排序:
场景A:DataFrame设置了name属性
假设每个df的name属性对应JP编号(如df.name = "JP002A-0002"):
target_order = ["JP002A-0002", "JP002A-0003", "JP007A-0001", "JP002A-0001"] lbsl_lst = [df for tid in target_order for df in lbsl_lst if df.name == tid]
场景B:DataFrame含标识列
若每个df有一列(如code)存储JP编号,且该列值统一:
target_order = ["JP002A-0002", "JP002A-0003", "JP007A-0001", "JP002A-0001"] new_lbsl_lst = [] for tid in target_order: for df in lbsl_lst: if df['code'].iloc[0] == tid: new_lbsl_lst.append(df) break lbsl_lst = new_lbsl_lst
注:若需
lbsl_lst[3]对应JP007A-0001,修改target_order为["JP002A-0002", "JP002A-0003", "JP002A-0001", "JP007A-0001"]即可。
内容的提问来源于stack exchange,提问作者Stataq
相关产品推荐
相关产品推荐

