pandas - 如何使用 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)
这行得通,但我的问题是是否有更聪明的方法来做到这一点。
解决方案
推荐阅读
- c# - 如何以数据库优先的方法仅更新一个模型?
- python - 如何为 Python 3.7.4 导入和使用 Pygal?
- python - 在文本文件python中用新行分割
- asp.net - 使用 {TENANT_ID}.mydomain.com 而不是 {TENANCY_NAME}.mydomain.com 需要进行哪些更改?- Asp.NET 零
- python-3.x - 有没有办法设置一个全局变量以与 aiortc 一起使用?
- mysql - 从 5.7 升级后的 MySQL 8 SELECT 语句语法问题
- html - HTML 读取链接而不是标签的可访问性?
- azure-active-directory - 租户“UserVoice, Inc.”中不存在所选用户帐户
- ios - 在表格视图单元格中点击手势不适用于 imageView
- wildfly - Wildfly 尝试打开错误的服务器