Pandas pivot/melt操作丢失index问题求助
解决pivot后melt丢失subject列的问题
问题原因
执行pd.pivot后,subject被设为DataFrame的索引,而默认调用melt()时不会将索引作为数据列保留,因此转换后丢失了subject信息。
解决方法
方法1:先重置索引为普通列,再执行melt
将索引subject转为普通列后,通过id_vars指定要保留的标识列,确保subject不会被融合:
# 把索引转为普通列 pivoted_reset = pivoted.reset_index() # 执行melt,指定标识列、列名映射 pivotedBack = pivoted_reset.melt( id_vars="subject", var_name="when", value_name="sbp" ) # 可选:按原数据的subject排序(和原表结构更接近) pivotedBack = pivotedBack.sort_values("subject").reset_index(drop=True)
方法2:melt时保留索引,再转换为列
利用ignore_index=False参数保留索引,之后再将索引转为普通列:
# melt时保留索引,自定义列名 pivotedBack = pivoted.melt( ignore_index=False, var_name="when", value_name="sbp" ) # 把索引转为subject列,重置索引 pivotedBack = pivotedBack.reset_index().rename(columns={"index": "subject"}) # 可选排序 pivotedBack = pivotedBack.sort_values("subject").reset_index(drop=True)
验证结果
执行上述任意方法后,pivotedBack会恢复包含所有列的结构(示例结果):
subject when sbp 0 BHO before 160 1 BHO after 160 2 GWB before 115 3 GWB after 135 4 WJC before 105 5 WJC after 145
(注:原表行顺序可通过额外排序调整,核心是保留了所有关键列信息)
内容的提问来源于stack exchange,提问作者Terry Letsche
相关产品推荐
相关产品推荐

