Pandas展开包含列表元组的列并合并为目标DataFrame的最优方案
Pandas元组列拆分展开最优实现方案
核心实现思路基于Pandas原生向量化操作,无需遍历逐行处理,性能最优,全程仅需两步即可得到目标结果:
- 将
exploded_features列存储的二元组拆分为两个独立的列表列 - 对两个列表列同时执行展开操作,直接得到结构化结果
完整可运行代码
import pandas as pd # 样例输入数据 sample_df = pd.DataFrame({'id':[1,2,3], 'exploded_features':[(['a1','a2','a3'],['b1','b2','b3']), (['a4','a5','a6'],['b4','b5','b6']), (['a7','a8','a9'],['b7','b8','b9'])]}) # 核心处理逻辑 # 拆分元组为两个列表列 sample_df[['exploded_features_1', 'exploded_features_2']] = pd.DataFrame(sample_df['exploded_features'].tolist(), index=sample_df.index) # 同时展开两个列表列,重置索引并筛选目标字段 result = sample_df.explode(['exploded_features_1', 'exploded_features_2'], ignore_index=True)[['id', 'exploded_features_1', 'exploded_features_2']] print(result)
方案优势
- 全部采用Pandas原生接口实现,向量化运算性能远高于自定义apply、逐行遍历等方案,百万级数据量下仍能保持高效运行
- 代码逻辑清晰简洁,仅需两行核心代码即可完成需求,维护成本低
- 输出结果的字段顺序、索引形式和预期完全一致,无需额外调整
低版本Pandas兼容方案
如果你使用的Pandas版本低于1.3(不支持多列同时explode),可以使用以下兼容写法:
# 低版本兼容处理逻辑 sample_df = sample_df.assign(val=sample_df['exploded_features'].apply(lambda x: list(zip(*x)))).explode('val', ignore_index=True) sample_df[['exploded_features_1', 'exploded_features_2']] = pd.DataFrame(sample_df['val'].tolist(), index=sample_df.index) result = sample_df[['id', 'exploded_features_1', 'exploded_features_2']]
内容的提问来源于stack exchange,提问作者Laz
相关产品推荐
相关产品推荐

