如何使用列表推导式从转置DataFrame列生成指定结构嵌套列表
实现方案
1. 一行列表推导式写法
直接用zip配对三类列即可实现,代码如下:
vars = [[d, g, r] for d, g, r in zip( sorted(c for c in test.columns if 'Date' in c), sorted(c for c in test.columns if 'GMV' in c), sorted(c for c in test.columns if 'Gross Revenue' in c) )]
逻辑说明
- 内层三个生成器分别筛选出Date、GMV、Revenue三类列,加
sorted保证列按末尾的0-9序号升序排列,避免因DataFrame原列顺序混乱导致匹配错误 - 用
zip函数将三个筛选后的列表按位置一一配对,每次迭代直接取出同序号的三类列,无需手动遍历下标,代码更简洁 - 对比你原来的下标遍历写法,
zip会自动按最短的列表长度截断,避免下标越界报错,稳定性更好
2. 更适合pandas场景的通用处理方法
如果后续可能新增其他指标列,或者列数量较大,推荐按列名后缀自动分组,无需硬编码列前缀:
from collections import defaultdict col_groups = defaultdict(list) for col in test.columns: # 提取列名末尾的数字作为分组标识 suffix = ''.join(filter(str.isdigit, col)) col_groups[suffix].append(col) # 按序号排序后生成目标嵌套列表 vars = [col_groups[k] for k in sorted(col_groups.keys(), key=int)]
优势
- 扩展性更强,新增任意前缀的指标列都会自动归到对应序号的组里,无需修改代码
- 性能比多次遍历
test.columns更高,只需遍历一次列名即可完成分组
注意事项
你原代码中存在变量名大小写不一致的问题,定义的变量是date,后续用的时候写的是Date,实际运行会报错,请注意统一变量名规范。
内容的提问来源于stack exchange,提问作者Nate
相关产品推荐
相关产品推荐

