Pandas如何访问多索引DataFrame以选择值来制作热图..!

use*_*320 4 python indexing heatmap multi-index pandas

感谢您花时间点击这个..!

对,我正在尝试制作热图.

我遇到的问题是我有这样的数据:

请看DataFrame的屏幕显示:

g.head(11)
Out = :

           profit
a    b    
1.04 1.09  0.886
1.08 1.03  0.03
     1.05  0.17
     1.09  0.39
     1.16  2.85
1.1  1.12 -0.346
     1.14  0.34
     1.29  1.23
1.11 1.06  0.87
     1.08  1.23
     1.09 -2.86
Run Code Online (Sandbox Code Playgroud)
  • 这些值都是唯一的,这意味着a&b的每个组合只有一个利润

  • 我想:绘制x,y的热图,颜色是z值.

我的x坐标是一个列表,以0.01为间隔从1.01到2.0

我的y坐标是一个相同的列表,例如[1.01,1.02,1.03 .. 1.99,2.0]所以我做了这个x&y的网格网格

我的z坐标我希望从上面的列中获得"利润",当x = a和b = y时,绘制利润

但我遇到了矢量化问题,使用x和y通过网格网格提取利润,并在a = x和b = y时查找利润.我将解释更多

使用x和y制作网格网格对于x和y的所有组合,找到a&b和查找利润,使用a = x和b = y如果不存在这样的组合,则返回0如果组合存在,如果利润为+,则绘制绿点如果利润为 - ,则绘制一个红点.利润越大,绿色越亮损失越大,红色越亮,零可以用蓝色表示

这是一个尝试,因为我做了一些代码..我已经改变了这么多尝试不同的事情,它可能没有多大意义,但你会得到我一直在努力做的事情的要点..

def z_func(x,y):
    #print 'x = ',x
    q = plotDF[(plotDF.x == x) & (plotDF.y == y)].profit.values
    return q
    #return x + y
    #return x.astype(float) + y.astype(float)


X,Y = meshgrid(x, y) # grid of point
Z = z_func(X, Y) # evaluation of the function on the grid
im = imshow(Z,cmap=cm.RdBu) # drawing the function
colorbar(im)
show()
Run Code Online (Sandbox Code Playgroud)

伙计们,我一整天都在玩这个游戏,在网上阅读一些东西尝试查找(),同时取出了hierarahical索引,只有一个带有x,y和利润列的数据框......但我一直在犯傻错误,错误..我其实不知道自己在做什么!

任何人都可以对此有所了解吗?非常感谢!!!!!

Ps新年快乐2014家伙!

Dan*_*lan 7

只需取消堆叠,而不是设置meshgrid.它将b列和叶子定位为a行,每个值都在正确的位置,并且NaN在a/b组合不存在的位置.你可以填0.

然后,而不是imshow,使用pcolor.

plt.pcolor(df.unstack().fillna(0))
Run Code Online (Sandbox Code Playgroud)

您可能需要使用sort_index按顺序获取列和行,具体取决于df设置.

这个答案有关但不完全相同.