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 创建映射表的主要内容,如果未能解决你的问题,请参考以下文章

pivot和unpivot sql表

SQL Server 使用 Pivot 和 UnPivot 实现行列转换

SQL Server 使用 Pivot 和 UnPivot 实现行列转换

如何在SQL中产生交叉式数据表(枢纽分析表)Part 2(PIVOT,UNPIVOT)

oracle行转列和列转行(pivot 和 unpivot 函数,wm_concat函数 )

PIVOT、UNPIVOT 转换行与列