首页 > 解决方案 > 带有双标头的 DataFrame 散点图

问题描述

具有如下结构的 DataFrame:

                 A            B
country       C     D     C      D
Albany      2.05    4    1.85    4
China       2.67    3    1.21    3
Portugal    1.44    6    2.34    6
France      5.83    3    2.50    3
Greece      0.63    6    3.02    6

我不知道如何制作散点图,选择 A 或 B 时,每个国家/地区的 x=C 和 y=D 都会给我一个散点图。如果我这样做,它会给我一个 KeyError:

df.plot.scatter(x='C', y='D')

有什么建议么?

非常感谢!

标签: pythonpandas

解决方案


您可以group在列的第 0 级上分别绘制每个列。分组仅拆分 DataFrame,它不会修改任何内容,因此您可以使用元组作为键或用于DataFrame.xs删除现在冗余的 MultiIndex 级别。

for idx, gp in df.groupby(level=0, axis=1):
    gp.xs(idx, level=0, axis=1).plot.scatter(x='C', y='D', title=idx)

在此处输入图像描述 在此处输入图像描述


或者,如果您想要一个情节:

import matplotlib.pyplot as plt

cd = {'A': 'red', 'B':'blue'}  # color by group

fig, ax = plt.subplots()
for idx, gp in df.groupby(level=0, axis=1):
    gp.xs(idx, level=0, axis=1).plot.scatter(x='C', y='D', ax=ax, label=idx, c=cd[idx])

在此处输入图像描述


推荐阅读