Pandas如何实现DataFrame列转行转置得到Scores与Values对应表
问题原因
你的两种实现逻辑都没匹配原DataFrame的结构特征:原表前两列是标识列,从Min_4到Max_4的每一列,对应目标结果里的一行,其中第一行(Variable=Scores)存的是目标表Scores列的值,第二行(Params=MAP)存的是目标表Values列的值。
- 直接用
melt()的错误:你把Variable、Params作为固定列融表后,分数值和MAP生理值会被堆到同一个值列里,没法拆成目标要求的两列结构。 - 转置方法出
object类型的错误:你把所有数值列设为索引再转置,pandas需要兼容列里的混合值(分数、MAP值、NaN),会自动把类型降级为object,后续切片的索引逻辑也不对,切不到正确的数值范围。
正确实现
直接提取对应行的数值拼接成新表即可,不会出现类型异常,代码最简单:
# 提取所有存储数值的列(从第三列开始到末尾) num_cols = df_MAP.columns[2:] # 分别提取分数序列、MAP值序列,拼接为新DataFrame df_result = pd.DataFrame({ "Scores": df_MAP[df_MAP["Variable"] == "Scores"][num_cols].iloc[0].values, "Values": df_MAP[df_MAP["Params"] == "MAP"][num_cols].iloc[0].values })
执行后得到的结果和目标结构完全一致,两列均为数值类型,不会出现object类型问题:
Scores Values 0 4.0 160.0 1 3.0 130.0 2 2.0 110.0 3 1.0 NaN 4 0.0 70.0 5 1.0 NaN 6 2.0 50.0 7 3.0 NaN 8 4.0 49.0
内容的提问来源于stack exchange,提问作者pythondumb
相关产品推荐
相关产品推荐

