python - 带有双标头的 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')
有什么建议么?
非常感谢!
解决方案
您可以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])
推荐阅读
- php - 在 PHP 中计算日期之间的绝对差异
- php - 如何在同一域名下的同一 nginx 服务器上运行 angular 和 wordpress 项目
- android - 错误:找不到 Gradle DSL 方法:'freeImplementation()'
- python - 如何在 dockerized django 中重新加载 python 代码?
- r - 根据特定属性对 igraph 进行子图化以仅包含前 N 个“最大”节点
- xml - 如何定义 avro 模式以在 Nifi 上使用 ConvertRecord 获取 xml 属性?
- mysql - 我需要替换字符串的字符 \\ 并使用 JSON_EXTRACT 读取
- windows - 同时无声地从一个批处理文件运行多个 .exe 文件
- razorpay - 如何使用android在后端生成razorpay订单ID?
- javascript - 如何在 d3.js v5 中设置初始缩放