如何将Pandas DataFrame转换为指定的长表格式?
问题描述
我有如下Pandas DataFrame:
city,temp,real_feel Los Angeles,0.97,-4.05 London,2.34,-3.18 Amsterdam,6.05,1.63 Rome,4.59,1.29 Lisabon,15.48,15.15 Berlin,2.38,-1.65
尝试用pivot相关方法未能实现转换,需要将其转为如下格式:
city,type,value Los Angeles,temp,0.97 Los Angeles,real_feel,-4.05 London,temp,2.34 London,real_feel,-3.18 Amsterdam,temp,6.05 Amsterdam,real_feel,1.63 Rome,temp,4.59 Rome,real_feel,1.29 Lisabon,temp,15.48 Lisabon,real_feel,15.15 Berlin,temp,2.38 Berlin,real_feel,-1.65
解决方案
你需要使用Pandas的melt()方法——这是专门将宽表转换为长表的工具,和pivot的作用相反。
代码示例
import pandas as pd # 构造原始DataFrame(也可从csv文件读取) df = pd.DataFrame({ "city": ["Los Angeles", "London", "Amsterdam", "Rome", "Lisabon", "Berlin"], "temp": [0.97, 2.34, 6.05, 4.59, 15.48, 2.38], "real_feel": [-4.05, -3.18, 1.63, 1.29, 15.15, -1.65] }) # 执行转换 melted_df = df.melt( id_vars=["city"], # 指定保留不变的列 var_name="type", # 原列名对应的新列名 value_name="value" # 原列值对应的新列名 ) # 输出结果(转为csv格式) print(melted_df.to_csv(index=False))
说明
id_vars=["city"]:指定不需要被转换的列,每个城市会作为分组基础重复出现。var_name="type":把原来的temp、real_feel这些列名,统一放到名为type的新列中。value_name="value":把原来各列对应的值,统一放到名为value的新列中。
执行后就能得到你需要的长表结构。
内容的提问来源于stack exchange,提问作者botafogo
相关产品推荐
相关产品推荐

