如何用pd.melt将列名作为标识符转换Pandas DataFrame为长表
实现方案
优先使用melt的方法
直接调用pandas的melt宽转长方法,指定对应列名即可,转换结果完全符合需求:
import pandas as pd # 原始DataFrame构造 df = pd.DataFrame({"MCD":[1,2,-2,-3, 5], "AAPL":[-0.3, -0.6, 0.6, 0.9, -1.5], "GOOG":[-0.8, 1.6, 2.4, 3.6 , -4], "MSFT":[-0.1, -0.4, 0.8, 1.1, -1.3]}) # 转换核心代码 desired_df = df.melt(var_name='ticker', value_name='return')
其中参数var_name指定原表列名存储的新列名,value_name指定原表数值存储的新列名,默认转换顺序和原表列的先后顺序一致,索引自动从0开始生成,和你给出的目标格式完全匹配。
备选stack实现方案
也可以用堆叠方法实现,效果相同:
desired_df = df.stack()\ .reset_index(level=0, drop=True)\ .rename_axis('ticker')\ .reset_index(name='return')
内容的提问来源于stack exchange,提问作者Eiffelbear
相关产品推荐
相关产品推荐

