python - 从 pandas 数据帧创建自定义热图

标签 python python-3.x pandas heatmap

我有一个 8 行 6028 列的数据框。我想为第一列创建 8 行的热图(最终我将创建一个动画,以便 map 更新读取每列)

这是数据框的片段:

                       value                    
percentage_time         0.00      0.15      0.16
region                                          
Anterior Distal     0.111212  0.119385  0.116270
Anterior Proximal   0.150269  0.153613  0.168188
Lateral Distal      0.130440  0.137157  0.136494
Lateral Proximal    0.171977  0.182251  0.181090
Medial Distal       0.077468  0.082064  0.082553
Medial Proximal     0.194924  0.198803  0.199339
Posterior Distal    0.164124  0.171221  0.166328
Posterior Proximal  0.131310  0.145706  0.136094

我使用了以下代码,但它为我提供了一张图,其中索引堆叠在一起并且数据框中的所有数据:

sns.heatmap(region_pressure_data)

enter image description here

当我尝试使用以下代码仅获取第一列时,我得到以下结果:

sns.heatmap(region_pressure_data.ix[:,0:1])

enter image description here

理想情况下,我想要一张包含 8 个区域的 map ,其中有 2 行(近端和远端)和 4 列(前、外侧、后、内侧),显示一列的数据。

如果您能就使用此方法取得进展或是否有更好的方法来应对挑战提供任何建议,我将不胜感激。

提前致谢。

最佳答案

索引中的数据需要成为单元格的一部分,并且您可能需要一个主元。 为了进行解释,我创建了一些类似的数据框,其中列较少,以说明我正在做的事情。我希望这是您正在使用的结构?

df = pd.DataFrame(index=["Anterior Distal", "Anterior Proximal", "Lateral Distal", "Lateral Proximal"], data={0.:[1,2,3,4], 1.:[5,6,7,8]})
print(df)                                                                     
>>>
                   0.0  1.0
region                     
Anterior Distal      1    5
Anterior Proximal    2    6
Lateral Distal       3    7
Lateral Proximal     4    8

据我了解,您想要显式引用索引的两个部分,因此您需要首先拆分索引。例如,您可以通过以下方式执行此操作:首先使用 pandas 方法来拆分字符串,然后将其转换为可以切片的 numpy 数组

index_parts = np.array(df.index.str.split().values.tolist())
index_parts[:,0]
>>> array(['Anterior', 'Anterior', 'Lateral', 'Lateral'], dtype='<U8')

现在,您可以将它们添加为新列

df["antlat"] = index_parts[:,0]
df["distprox"] = index_parts[:,1]
print(df)
>>>
                   0.0  1.0    antlat  distprox
region                                         
Anterior Distal      1    5  Anterior    Distal
Anterior Proximal    2    6  Anterior  Proximal
Lateral Distal       3    7   Lateral    Distal
Lateral Proximal     4    8   Lateral  Proximal

然后您可以为您感兴趣的值创建数据透视表

df_pivot = df.pivot(index="antlat", columns="distprox", values=0.0)
print(df_pivot)
>>>
distprox  Distal  Proximal
antlat                    
Anterior       1         2
Lateral        3         4

并绘制它(请注意,这只是 2x2,因为我没有将内侧和后部添加到示例中)

sns.heatmap(df_pivot)

enter image description here

关于python - 从 pandas 数据帧创建自定义热图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57508626/

相关文章:

python - decimal.Decimal(n) % 1 返回 InvalidOperation, DivisionImpossible for all n >= 100

java - 如何将 Python 中的递归深度优先搜索转换为 Java?

python - Tcl 错误 : no display name and no $DISPLAY environment variable on Windows 10 Bash

python - 在 windows 10 中以高分辨率测量两个 python 进程之间的 zmq 延迟

python-3.x - 通过Jupyter使用TensorFlow(Python 3)

python - 多索引数据帧上的操作

python - Django 管理站点丢失了所有格式

python-3.x - 如何将枚举(或列表)传递给SQLite?

python - 计算列中的重复项并将它们添加到新列 Pandas

python - 让 Pandas 与 Pendulum 一起工作