将pandas数据框转换为元组列表-(“行”,“列”,值)


问题内容

关于同一主题还有其他一些问题,但是所需的格式完全不同。

我正在尝试使用holoviews和bokeh构建热图可视

我的数据正在作为Excel文件读入数据框,内容如下:

    Foo    Bar    Bash    Baz   ...
A   1      2      3       4
B   2      1      0       3
C   0      0      2       0
D   2      3      5       1
...

该文件说 The data for a HeatMap may be supplied as 2D tabular data with one or more associated value dimensions.

绘制数据框本身不起作用,我觉得我需要将数据转换成如下形式:

[('A', 'Foo', 1), ('A', 'Bar', 2), ('A', 'Bash', 3), ('A', 'Baz', 4), ('B', 'Foo', 1)...]

有比手动遍历整个数据框并手动构建它更快的方法吗?


问题答案:

您可以先调整形状stack,然后转换为tuples:

tups = [tuple(x) for x in df.stack().reset_index().values.tolist()]

另一个类似的解决方案是创建3个级别MultiIndex

tups = df.stack().to_frame().set_index(0, append=True).index.tolist()

zip3分别array以S
numpy.repeatnumpy.tileravel

a = np.repeat(df.index, len(df.columns))
b = np.tile(df.columns, len(df))
c = df.values.ravel()

tups = list(zip(a,b,c))