Pivot Unpivot 创建映射表
Posted
技术标签:
【中文标题】Pivot Unpivot 创建映射表【英文标题】:Pivot Unpivot to create a mapping table 【发布时间】:2020-07-19 19:51:50 【问题描述】:我有以下格式的数据,其中 Column_1 的值映射到 Map_1、Map_2 或 Map_3。但不是有一个映射表,数据以以下格式存在,其中 1 标记 Column_1 中的哪个值映射到哪个映射值
Column_1 Map_1 Map_2 Map_3
A 0 1 0
B 1 0 0
C 1 0 0
D 0 0 1
我想将其转换为以下格式:
A Map_2
B Map_1
C Map_1
D Map_3
```
【问题讨论】:
pandas.pydata.org/pandas-docs/stable/reference/api/… 这能回答你的问题吗? Unpivot Pandas Data 【参考方案1】:熊猫的idxmax 来救援。它返回具有最大值的列,在您的情况下就足够了:
import pandas as pd
df = pd.DataFrame("Bird":[1,0,1,0], "Snake":[0,0,0,1], "Dog":[0,1,0,0])
df.idxmax(1)
数据帧:
Bird Snake Dog
0 1 0 0
1 0 0 1
2 1 0 0
3 0 1 0
代码输出:
1 Dog
2 Bird
3 Snake
dtype: object
对于您的情况:
df.loc[:, ["Map_1", "Map_2", "Map_3"]].idxmax(1)
【讨论】:
【参考方案2】:用pd.DataFrame.dot
试试这个,假设Column_1
是你的索引:
df.dot(df.columns)
如果 Column_1
不是您的索引,请尝试:
df[df.colmuns[1:]].dot(df.columns)
输出:
A Map_2
B Map_1
C Map_1
D Map_3
dtype: object
【讨论】:
以上是关于Pivot Unpivot 创建映射表的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 使用 Pivot 和 UnPivot 实现行列转换
SQL Server 使用 Pivot 和 UnPivot 实现行列转换
如何在SQL中产生交叉式数据表(枢纽分析表)Part 2(PIVOT,UNPIVOT)