如何基于列值对Pandas DataFrame执行explode展开操作
Pandas按区间字符串拆分多行实现方案
核心利用pandas原生explode方法实现,全程无需额外依赖,3行核心代码即可完成需求。
完整实现代码
import pandas as pd # 1. 构造示例原始数据 df = pd.DataFrame([ {"Location": "New York", "Number": 111, "Position": "1 through 12"}, {"Location": "Dallas", "Number": 222, "Position": "1 through 12"}, {"Location": "San Francisco", "Number": 333, "Position": "1 through 4"} ]) # 2. 处理Position列,将区间字符串转为区间内所有整数组成的序列 df["Position"] = df["Position"].apply( lambda s: range( int(s.split(" through ")[0]), int(s.split(" through ")[1]) + 1 # range为左闭右开结构,结束值+1保证包含区间终点 ) ) # 3. 执行explode拆分,自动保留其余列原值 df_result = df.explode("Position", ignore_index=True)
逻辑说明
- 字符串拆分阶段:通过
split(" through ")直接切割区间文本,拿到起始、结束数值,转成整数后用range()生成连续整数序列,不需要手动写循环生成列表 - 拆分阶段:pandas原生
explode方法会自动把列表/序列类型的列元素拆成独立行,Location、Number列的非序列值会自动在拆分后的新行中保留原值 ignore_index=True参数会直接为拆分后的结果生成从0开始的连续索引,不需要额外调用reset_index方法
结果验证
执行代码后返回的df_result共28行:
- New York对应12行,Position取值1~12
- Dallas对应12行,Position取值1~12
- San Francisco对应4行,Position取值1~4
完全匹配预期拆分效果,该方法兼容pandas 1.3.0及以上所有正式版本。
内容的提问来源于stack exchange,提问作者rbasu98
相关产品推荐
相关产品推荐

