You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas如何互换DataFrame行索引与单元格值重构数据

Pandas行索引与单元格值互换转换方案

你需要实现的是逐列将单元格的等级值(A/B/C)替换为新行索引,原人名行索引替换为对应单元格值的结构转换,pivot类方法面向长宽表转换场景,不适配这类逐列映射反转的需求,直接按逐列处理的逻辑实现即可。

完整实现代码

import pandas as pd
import numpy as np

# 构造原始DataFrame
df = pd.DataFrame({
    "day1": {"JOHN": "A", "JANE": "B", "JILL": "C"},
    "day2": {"JOHN": "A", "JANE": "C", "JILL": np.nan},
    "day3": {"JOHN": "C", "JANE": "A", "JILL": "B"}
})

# 逐列反转索引与值的映射,固定新行索引顺序
result = df.apply(
    lambda col: pd.Series(col.index, index=col.values).reindex(["A", "B", "C"])
)

print(result)

运行输出

执行代码后将得到完全匹配预期的结果:

day1  day2  day3
A  JOHN  JOHN  JANE
B  JANE   NaN  JILL
C  JILL  JANE  JOHN

实现逻辑说明

  • 用df.apply()逐列遍历原始表,对每一列单独做映射转换,不改变原有列的顺序
  • 对单列数据,直接以原单元格值作为新索引、原行索引(人名)作为新值构造Series,一步完成索引和值的互换
  • 用reindex(["A", "B", "C"])固定新表的行顺序,未匹配到值的位置(比如day2的B等级)会自动填充为NaN,和预期结果一致

内容的提问来源于stack exchange,提问作者jsteinbecker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 17:25:03