Pandas遍历行列获取行列值对 宽表转x/y/z三列长表实现方法问询
Pandas宽表转长表解决方案
你需要实现的是Pandas标准的宽表转长表重塑操作,无需手动遍历行列,使用内置的优化方法即可零丢失完成转换,同时性能远高于自行遍历的实现。
方法1:使用stack方法(最简洁)
stack会自动将列名转为二级行索引,重置索引后直接重命名列即可得到目标结构:
import pandas as pd # 构造示例中的原DataFrame df = pd.DataFrame( data=[[10, 15, 20], [11, 16, 21], [12, 17, 22]], index=[1, 2, 3], columns=[1, 2, 3] ) # 重塑操作 result = df.stack().reset_index() # 重命名列符合需求 result.columns = ['x', 'y', 'z']
方法2:使用melt方法(逻辑更直观)
melt是专门的宽转长方法,参数语义明确,更便于理解:
result = df.reset_index().melt( id_vars='index', var_name='y', value_name='z' ).rename(columns={'index': 'x'}).sort_values('x').reset_index(drop=True)
注意:不建议使用手动遍历行/列的方式实现该需求,Pandas内置的重塑方法为向量化优化实现,数据量越大性能优势越明显,同时能避免手动编码可能出现的数值遗漏、顺序错误等问题。
内容的提问来源于stack exchange,提问作者user17403496
相关产品推荐
相关产品推荐

