如何将pandas交叉表格式的DataFrame转换为指定长格式
实现方案
这个需求属于宽表转长表场景,直接用pandas的melt方法就能快速实现,pivot是长表转宽表的方法,本次场景不需要用到,具体操作步骤如下:
步骤1:预处理原始数据
先把原始数据里的字符串格式'NaN'替换为pandas可识别的空值,方便后续过滤:
import pandas as pd import numpy as np # 构造原始DataFrame d = {'Country': ['USA', 'France', 'Germany'], 'USA': ['NaN', 2, 5], 'France': [3, 'NaN', 7], 'Germany': [3.5, 4, 'NaN']} df = pd.DataFrame(data=d) # 替换字符串NaN为真实空值 df = df.replace('NaN', np.nan)
步骤2:用melt重塑表格
result = df.melt( id_vars='Country', # 保持Country列不动作为第一维度 var_name='Country2', # 原来的列名转为新列Country2,作为第二维度 value_name='Value' # 单元格数值存入Value列 ).dropna().sort_values('Country').reset_index(drop=True) # 过滤对角空值、按Country排序、重置索引
验证结果
打印result即可得到你需要的输出:
Country Country2 Value 0 USA France 3.0 1 USA Germany 3.5 2 France USA 2.0 3 France Germany 4.0 4 Germany USA 5.0 5 Germany France 7.0
内容的提问来源于stack exchange,提问作者user14237226
相关产品推荐
相关产品推荐

