Pandas中如何基于已有DataFrame生成指定三列结构的新DataFrame
DataFrame宽转长实现方案
你需要将行列交叉的宽表转换为「行索引-列名-单元格值」结构的长表,用pandas内置方法即可直接实现,无需手写遍历逻辑。
- 方法1:
stack实现(性能最优、代码最简洁)stack是pandas专门用于将列维度转换为行索引的接口,适配代码如下:
# 核心转换:将列转为二级行索引后,重置索引为普通列 b = a.stack().reset_index() # 按要求设置列名 b.columns = ["column1", "column2", "column3"]
运行后得到的b完全匹配目标结构:原行索引存入column1,原列名存入column2,对应行列的单元格值存入column3,行顺序与示例完全一致。
- 方法2:
melt实现(通用长宽转换接口)
如果习惯使用通用长宽表转换APImelt,可使用如下代码:
# 先将原行索引转为普通列,再执行宽转长操作 b = a.reset_index().melt( id_vars="index", var_name="column2", value_name="column3" ).rename(columns={"index": "column1"})
两种方法输出结果完全一致,针对给出的5*5测试数据,转换后为25行3列的目标结构。
内容的提问来源于stack exchange,提问作者alireza
相关产品推荐
相关产品推荐

