如何在 Python 中创建带有过滤器的交互式图表(例如 Excel 数据透视图)

GoC*_*rry 0 python plot data-visualization pandas jupyter-notebook

首先让我描述一下我试图用 Python 重现的 Excel 数据透视图。

以下是生成示例数据集的代码:

# The code should work in Python 3.7 and pandas 0.24 or above
import pandas as pd
years = [i for i in range(2015,2021)]
countries = ['US', 'CA', 'JP', 'MX', 'IT']
months = [i for i in range(1,13)]

idx = pd.MultiIndex.from_product([years, countries, months], names=['year', 'country', 'month'])
df = pd.DataFrame(np.random.randn(len(idx), 1),columns=['val'], index=idx).sort_index()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我可以将df.to_clipboard()其粘贴到 Excel 中,如下所示:

在此输入图像描述

然后我可以根据数据插入数据透视图,并以某种方式配置它,以便我可以按年份和国家/地区查看每月线图。该数据透视图是“交互式”的,因为通过“年份”和“国家/地区”下拉控件,我可以以任何我想要的方式方便地过滤数据,例如“显示 JP 的所有年份”或“显示 2020 年的所有国家/地区” ”。

在此输入图像描述

我的问题是
有没有简单的方法可以在 Python 中创建这样的交互式绘图?我使用 Jupyter Notebook 来处理数据并做了很多这样的探索性研究。我不喜欢每次想要可视化数据时都必须将数据复制到 Excel 中。在Python中,我可以做一些愚蠢的事情,比如df.loc[(2015, 'US'),:].plot()我想将它们过滤到特定的国家或年份,但它不像具有GUI下拉控件的数据透视图那么方便,并且与我的同事分享它并不容易让他们玩一下。

预先感谢您的帮助!

moc*_*uin 5

这些选项并不能完全满足您的要求,但它是一个开始:

您可能想看看jupyter_pivottablejs :它通过将数据透视表嵌入到笔记本中(至少在 jupyterlab 中,不确定经典笔记本),提供了一个简单但相当完整的交互式界面,相当于 excel 的数据透视表。

例子

请注意,它不允许以交互方式预过滤数据。为此,请查看qgrid,它允许交互式浏览数据帧和过滤。

网格