【发布时间】:2019-01-29 20:10:05
【问题描述】:
我有一个包含两个分类列和第三个整数的数据框:
import pandas as pd
df1 = pd.DataFrame({
'First': ['A','A','A','B','B','C'],
'Second': ['B','C','D','C','D','D'],
'Value': [1,2,3,4,5,6]}
)
df1
First Second Value
0 A B 1
1 A C 2
2 A D 3
3 B D 4
4 B D 5
5 C D 6
我想得到对应的三角矩阵,as(缺失值可以是NAs):
A B C D
1 2 3 A
4 5 B
6 C
最后,将它绘制在一个三角形热图中,我相信我可以在 this question 的帮助下做到这一点,但是,这需要一个 numpy 掩码数组作为输入。也非常欢迎其他不使用 numpy 来绘制此图的解决方案。
关于如何实现这一点的任何 Pythonic 想法?
编辑:
我意识到我给出的例子太简洁了。我的专栏没有按照上面的方式组织。所以我有这样的事情:
df1 = pd.DataFrame({
'First': ['D','C','B','A','C','A','B','D','B','C'],
'Second': ['E','E','C','D','D','E','E','B','A','A'],
'Value': [1,2,3,4,5,6,7,8,9,10]}
)
First Second Value
0 D E 1
1 C E 2
2 B C 3
3 A D 4
4 C D 5
5 A E 6
6 B E 7
7 D B 8
8 B A 9
9 C A 10
和
df1.pivot('First','Second','Value')
生产
Second A B C D E
First
A NaN NaN NaN 4.0 6.0
B 9.0 NaN 3.0 NaN 7.0
C 10.0 NaN NaN 5.0 2.0
D NaN 8.0 NaN NaN 1.0
一个非三角形、非对称矩阵。我需要具有相同数量的行和列,并将所有这些 NaN 推到边缘以创建一个三角形。 Pivot 似乎不是一个可能的解决方案
EDIT2
解决方案和期望的输出存在并且是:
A B C D E
A NaN 9 10 4 6
B NaN NaN 3 8 7
C NaN NaN NaN 5 2
D NaN NaN NaN NaN 1
E NaN NaN NaN NaN NaN
【问题讨论】:
标签: python pandas matplotlib heatmap triangular