首页 > 解决方案 > 在 pandas 中查询数据,其中点按 hexbin 函数分组

问题描述

seaborn 和 pandas 都提供了 API,以便将二元直方图绘制为 hexbin 图(下图示例)。但是,我正在搜索对位于同一 hexbin 中的点执行查询。是否有一个函数可以检索与 hexbin 中的数据点关联的行?

举个例子:我的数据框包含 3 行ABC。我sns.jointplot(x=A,y=B)用来绘制密度。现在,我想对位于同一 bin 中的每个数据点执行查询。例如,对于每个 bin 计算C与每个点关联的值的平均值。

在此处输入图像描述

标签: pythonpandasnumpyscipyseaborn

解决方案


当前解决方案——快速破解

目前,我已经实现了以下函数,以将函数应用于与位于同一 hexbin 中的 (x,y) 坐标关联的数据:

def hexagonify(x, y, values, func=None):

    hexagonized_list = []

    fig = plt.figure()
    fig.set_visible(False)
    if func is not None:
        image = plt.hexbin(x=x, y=y, C=values, reduce_C_function=func)
    else:
        image = plt.hexbin(x=x, y=y, C=values)

    values = image.get_array()

    verts = image.get_offsets()
    for offc in range(verts.shape[0]):
            binx, biny = verts[offc][0], verts[offc][1]
            val = values[offc]
            if val:
                hexagonized_list.append((binx, biny, val))

    fig.clear()
    plt.close(fig)
    return hexagonized_list

值(与 x 或 y 大小相同)通过values参数传递。hexbin 是通过 的hexbin函数计算的matplotlib。这些值是通过get_array()返回的函数检索的PolyCollection。默认情况下,该np.mean函数应用于每个 bin 的累积值。可以通过向参数提供函数来更改此功能func。随后,该get_offsets()方法允许我们计算箱的中心(在此处讨论)。通过这种方式,我们可以(默认情况下)关联每个 hexbin 提供的值的平均值。但是,此解决方案是一个 hack,因此欢迎对此解决方案进行任何改进。


推荐阅读