Pandas去除列名后缀并执行unpivot操作的简便实现方法查询
解决方案
你可以直接用 pandas 内置的 pd.wide_to_long() 函数实现需求,不需要手动拆分拼接,代码更简洁高效:
import pandas as pd # 构造示例数据 data = {'Year_x': [1993, 1994, 1995, 1996], 'Year_y': [2000, 2001, 2002, 2003], 'Item_x':['A','B','C','D'], 'Item_y':['E','F','G','H'], '$':[3,4,5,6]} df = pd.DataFrame.from_dict(data) # 核心转换代码 res = pd.wide_to_long(df, stubnames=['Year', 'Item'], i='$', sep='_', suffix='.+')\ .reset_index()[['Year', 'Item', '$']]
运行后得到的res就是你需要的目标表结构。
参数说明
stubnames:指定需要提取的列名前缀,这里就是你要最终保留的Year和Itemi:指定宽表里不需要拆分的公共列,这里是不变的$列;如果实际数据中$列存在重复值,可修改为i=[df.index, '$']避免索引重复报错sep:指定列名前缀和后缀的分隔符,你的列名用的是下划线分隔,所以填_suffix:指定后缀的匹配规则,这里填.+匹配任意后缀字符
如果习惯用melt也可以实现,但代码量会比wide_to_long多,处理这种同前缀带后缀的宽转长场景,wide_to_long是最优解。
内容的提问来源于stack exchange,提问作者Jiamei
相关产品推荐
相关产品推荐

