如何从分层列绘制数据?

2024-09-29 19:24:01 发布

您现在位置:Python中文网/ 问答频道 /正文

enter image description here

我有这个表格,我想创建一个散点图,比如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: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

你能帮我吗

另外,我怎样才能摆脱层次化列而创建单独的列呢

^{tb1}$

因为我认为用这种方式工作更容易

谢谢

根据注释的建议,我将为您提供一个类似于我用来创建表的代码

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

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

我希望这有帮助


Tags: columnsrightdf分层cortexregcnleft
1条回答
网友
1楼 · 发布于 2024-09-29 19:24:01

扁平表

Also, how can I get rid of the hierarchical columns and create separate columns instead?

要删除多索引,请执行以下操作:

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')

分层表

听起来您更喜欢将表展平,但为了完整起见,您可以使用^{}对多索引进行切片

如果您想要左大脑皮层vs左海马,请沿axis=1(列)在level=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,
)

'left' plot

同样,如果您想要左大脑皮层与右大脑皮层,请在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,
)

相关问题 更多 >

    热门问题