首页 > 解决方案 > 如何对具有两级标题的数据框进行分组并生成箱线图?

问题描述

现在我有一个如下的数据框(原始数据框):

设备 一个 C
1 10 10 10
1 11 11 11
2 12 12 12
2 13 13 13
3 14 14 14
3 15 15 15

我想像下面这样转换数据框(转换后的数据框):

1 - - 2 - - 3 - -
一个 C 一个 C 一个 C
10 10 10 12 12 12 14 14 14
11 11 11 13 13 13 15 15 15

如何通过 Pandas 使用两级标题进行这种 groupby 转换?

另外,我想用转换后的dataframe生成箱线图,整个箱线图分为三个部分(即1、2、3),每个部分有三个箱线图(即A、B、C)。我可以在不进行任何处理的情况下使用图像 2 中转换后的数据框吗?或者我可以仅通过原始数据框实现箱线图吗?

太感谢了。

标签: pandasmatplotlibgroup-byseaborn

解决方案


尝试:

g = df.groupby(' Equipment ')[df.columns[1:]].apply(lambda x: x.reset_index(drop=True).T)

G:

Equipment   1           2           3
            A   B   C   A   B   C   A   B   C
          0 10  10  10  12  12  12  14  14  14
          1 11  11  11  13  13  13  15  15  15

解释:

grp = df.groupby(' Equipment ')[df.columns[1:]]

grp.apply(print)

    A    B    C 
0   10   10   10
1   11   11   11
    A    B    C 
2   12   12   12
3   13   13   13
    A    B    C 
4   14   14   14
5   15   15   15

您可以看到每个设备组 (1,2,3) 的索引 0 1, 2 3, 4 5。

这就是为什么我使用 reset_index 为每个组将它们设为 0 1 为什么?

如果您没有重置索引:

df.groupby(' Equipment ')[df.columns[1:]].apply(lambda x: x.T)

            0    1      2    3    4     5
Equipment                           
    1   A   10.0 11.0   NaN  NaN  NaN   NaN
        B   10.0 11.0   NaN  NaN  NaN   NaN
        C   10.0 11.0   NaN  NaN  NaN   NaN
    2   A   NaN  NaN    12.0 13.0 NaN   NaN
        B   NaN  NaN    12.0 13.0 NaN   NaN
        C   NaN  NaN    12.0 13.0 NaN   NaN
    3   A   NaN  NaN    NaN  NaN  14.0  15.0
        B   NaN  NaN    NaN  NaN  14.0  15.0
        C   NaN  NaN    NaN  NaN  14.0  15.0
    

请参阅 (2,3) 和 (4,5) 列中的值。我只想将它们组合到 (0, 1) 列中。这就是为什么用下降来重置索引。

            0   1
Equipment           
    1   A   10  11
        B   10  11
        C   10  11
    2   A   12  13
        B   12  13
        C   12  13
    3   A   14  15
        B   14  15
        C   14  15

你可以玩代码来深入理解它。里面发生了什么。


推荐阅读