pandas - 如何对具有两级标题的数据框进行分组并生成箱线图?
问题描述
现在我有一个如下的数据框(原始数据框):
设备 | 一个 | 乙 | 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 中转换后的数据框吗?或者我可以仅通过原始数据框实现箱线图吗?
太感谢了。
解决方案
尝试:
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
你可以玩代码来深入理解它。里面发生了什么。
推荐阅读
- c# - 命令优先于子模块组 Discord.Net
- sql-server - SQL Server:如何检测更新表/索引统计信息的适当时机
- nginx - 只允许一台主机使用入口 nginx configmap 进行连接
- c# - 动态获取一个 DbSet
按实体类名 - wordpress - 计算给定小部件的活动实例
- python - Python web-scraping 转到下一页
- azure - Azure AD - .Net Core 2 - 如何使用两个不同的客户端 ID?
- cookies - 在不收集任何数据的情况下跟踪网站访问
- c - Linux 内核模块中 GPL *find_symbol* 方法的替代方案
- c# - 在存储库模式中通过 TKey 查找实体