首页 > 解决方案 > 如何使用 groupby 创建具有 MultiIndex 列的 DataFrame 的子图

问题描述

假设我有一个 DataFrame,它表示作为索引函数测量的两个样本,并且它们都是在治疗之前和之后测量的。Inpandas将使用列 MultiIndex 以下列方式排列此类数据:

import pandas as pd
df_before = pd.DataFrame({'Sample 1': [1,2,3,4,5],
                          'Sample 2': [2,4,5,6,7]},
                         index=[0.1,0.2,0.3,0.4,0.5])
df_after = pd.DataFrame({'Sample 1': [1,4,3,2,3],
                          'Sample 2': [2,3,5,4,1]},
                         index=[0.1,0.2,0.3,0.4,0.5])
df = pd.concat([df_before,df_after],axis=1,keys=['Before', 'After'])

在此处输入图像描述

如果我想按之前/之后条件进行分组,我通常会这样做:

for key,grp in df.groupby(axis=1, level=0):
    grp[key].plot(title = key)

在此处输入图像描述

但是,如果我想按样本设置分组groupby(level=1)

for key,grp in df.groupby(axis=1, level=1):
    grp[key].plot(title = key)

我收到一个错误,因为grp[key]失败,因为列第一级被保留。因此,我必须使用这种丑陋的解决方法,swaplevel(axis=1)以便现在样本位于 MultiIndex 的 0 级:

for key,grp in df.groupby(axis=1, level=1):
    grp.swaplevel(axis=1)[key].plot(title = key)

这行得通,但我的问题是是否有更聪明的方法来做到这一点。

标签: pandasmatplotlibplotpandas-groupby

解决方案


推荐阅读