Pandas如何从已有DataFrame转换得到指定列结构的新DataFrame
Pandas宽表转指定结构长表实现
直接用pandas内置的长宽表转换方法搭配简单的字符串处理即可实现,代码如下:
import pandas as pd # 示例df1(和给出的源数据一致) df1 = pd.DataFrame([[438.55, 654.78, 870.34]], columns=['Q1(25%)', 'Q2(50%)', 'Q3(75%)']) # 核心转换逻辑 df2 = df1.melt(var_name='quant', value_name='points') # 提取原列名中的分位数值 df2['quant'] = df2['quant'].str.extract(r'\((\d+)%\)').astype('int')
执行后得到的df2完全匹配目标结构:
quant points 0 25 438.55 1 50 654.78 2 75 870.34
逻辑拆解
melt方法会把原表的所有列名收拢为quant列的取值,对应行的数值收拢为points列,一步完成宽转长的基础结构调整- 正则提取部分直接匹配列名中括号内、百分号前的数字,转成整数后就得到目标的分位标识,不需要手动逐列替换字符串
- 该逻辑兼容df1存在多行数据的场景,不需要额外做适配修改
内容的提问来源于stack exchange,提问作者Hmm
相关产品推荐
相关产品推荐

