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
相关产品推荐
相关产品推荐

