如何将指定结构的Pandas DataFrame宽表转换为目标结构的长表?
实现方法
完全可以通过Pandas内置的melt函数完成这种宽表转长表的需求,具体代码如下:
import pandas as pd # 原始数据创建代码 inp = [{'age 15-19':10, 'age 20-30':100, 'Gender': 'F'}, {'age 15-19':11,'age 20-30':110, 'Gender': 'M'}, {'age 15-19':12,'age 20-30':120, 'Gender': 'F'}] df = pd.DataFrame(inp) # 核心转换逻辑 result = df.melt( # 保留不需要展开的列 id_vars = ['Gender'], # 指定需要展开为行的年龄列 value_vars = ['age 15-19', 'age 20-30'], # 展开后的年龄分类列命名 var_name = 'Age', # 展开后的数值列命名 value_name = 'Number' ) # 处理Age列的前缀,只保留年龄区间内容 # 如果你的df列名已经自动转为带下划线的age_15-19,把下面的空格改成下划线即可 result['Age'] = result['Age'].str.replace('age ', '', regex=False) # 输出结果 print(result)
运行上述代码后得到的输出和你需要的结构完全一致。melt是Pandas专门用来做宽表转长表的工具,核心作用就是把多列的分类数据展开为行,非常适配当前场景。
内容的提问来源于stack exchange,提问作者PAULO MARTINS
相关产品推荐
相关产品推荐

