【问题标题】:How to plot data from Hierarchical columns?如何绘制分层列中的数据?
【发布时间】:2021-05-06 03:06:59
【问题描述】:

我有这张表,我想创建一个散点图,表示轴“X”中的左侧海马体与轴“Y”中的左侧大脑皮层,因为是一个分层列,我不知道如何选择特定的我需要的专栏。

我试过了:

tabla1.plot(kind="scatter", x=(tabla1.iloc[:, tabla1.columns.get_level_values(Hippocampus)=='left']), y=(tabla1.iloc[:, tabla1.columns.get_level_values(["Cerebral Cortex "])=='left']), alpha=0.6, c='black')

但我收到了这个错误:

ValueError:DataFrame 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

你能帮帮我吗?

另外,我怎样才能摆脱分层列并创建单独的列?

RID str_dx Cerebral cortex left Cerebral cortex right hippotalamus left hippotalamus right

因为我认为这样更容易工作。

谢谢。

根据评论的推荐,我给你一个类似于我用来创建表格的代码。

首先,一个示例数据框(对不起,我试图使其相似):

data = {'RID': [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5], 'Str_dx': ['CN', 'CN', 'CN', 'CN', 'MCI', 'MCI', 'MCI', 'MCI', 'MCI;Dementia', 'MCI;Dementia', 'MCI;Dementia', 'MCI;Dementia', 'CN', 'CN', 'CN', 'CN', 'MCI', 'MCI', 'MCI', 'MCI'], 'reg_name': ['Hippocampus', 'Cerebral Cortex', 'Hippocampus', 'Cerebral Cortex', 'Hippocampus', 'Cerebral Cortex', 'Hippocampus', 'Cerebral Cortex', 'Hippocampus', 'Cerebral Cortex', 'Hippocampus', 'Cerebral Cortex', 'Hippocampus', 'Cerebral Cortex', 'Hippocampus', 'Cerebral Cortex', 'Hippocampus', 'Cerebral Cortex', 'Hippocampus', 'Cerebral Cortex'], 'reg_side': ['left', 'left', 'right', 'right', 'left', 'left', 'right', 'right', 'left', 'left', 'right', 'right', 'left', 'left', 'right', 'right', 'left', 'left', 'right', 'right'], 'gm_vol': [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]}
df = pd.DataFrame(data)
df

然后,我使用以下代码创建了最终的分层表:

tab = pd.pivot_table(df, values='gm_vol', index=['RID', 'Str_dx'], columns=['reg_name', 'reg_side'])
tab

希望对你有所帮助。

【问题讨论】:

  • 您提供了绘制数据的代码。但是,我们需要查看创建类似于您的数据表的代码。为测试目的创建的表应该有相同的列和行标签,但只有少量数据(最多10行数据)
  • 一种快速的方法是编辑帖子并复制粘贴table1.head(3).to_dict()table1.tail(3).to_dict() 的输出
  • 谢谢!我花了最后 40 分钟尝试制作类似的东西 :(

标签: python pandas dataframe


【解决方案1】:

扁平化表格

另外,我怎样才能摆脱分层列并创建单独的列?

摆脱 MultiIndex:

tab.columns = [' '.join(column).strip() for column in tab.columns]
tab = tab.reset_index()

#    RID        Str_dx  Cerebral Cortex left  Cerebral Cortex right  Hippocampus left  Hippocampus right
# 0    1            CN                    11                     13                10                 12
# 1    2           MCI                    15                     17                14                 16
# 2    3  MCI;Dementia                    19                     11                18                 10
# 3    4            CN                    13                     15                12                 14
# 4    5           MCI                    17                     19                16                 18

那么plot命令就很简单了:

tab.plot.scatter(x='Cerebral Cortex left', y='Hippocampus left')

分层表

听起来您更喜欢展平表格,但为了完整起见,您可以使用DataFrame.xs() 对 MultiIndex 进行切片。

如果您想要左侧大脑皮层与左侧海马体,请在 level=1(第二级)和 axis=1(列)中指定 key='left'。然后用x='Cerebral Cortex', y='Hippocampus'绘图:

tab.xs(
    key='left',
    level=1,
    axis=1,
).plot.scatter(
    x='Cerebral Cortex',
    y='Hippocampus',
    ylabel='Hippocampus',
    title='Left',
    legend=False,
)

同样,如果您想要左右大脑皮层,请在 level=0(第一级)和 axis=1(列)中指定 key='Cerebral Cortex'

tab.xs(
    key='Cerebral Cortex',
    level=0,
    axis=1,
).plot.scatter(
    x='left',
    y='right',
    ylabel='right',
    title='Cerebral Cortex',
    legend=False,
)

【讨论】:

    猜你喜欢
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 2019-06-02
    • 2021-04-24
    • 1970-01-01
    相关资源
    最近更新 更多