You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Pandas或Xarray最优表示带属性的二维数据

最优方案:Pandas 多级列索引(MultiIndex)

你给出的Excel是典型的复合表头结构,第一行表头是数据类型、第二行是城市名、行索引为年份,直接用Pandas的双级列索引结构存储即可完美匹配需求,无需额外维护元数据,类型信息会作为列索引的第一级内置在数据结构中。

数据导入构造代码

import pandas as pd

# 读取Excel时指定前两行为表头、第一列为行索引
df = pd.read_excel("你的文件路径.xlsx", header=[0, 1], index_col=0)
# 给索引命名方便后续筛选调用
df.columns.names = ["类型", "城市"]
df.index.name = "年份"

需求实现方法

1. 筛选指定类型的所有城市数据绘图

直接用Pandas内置的xs方法按层级筛选即可:

# 筛选所有Type A的城市数据
type_a_df = df.xs("Type A", level="类型", axis=1)
# 直接绘制趋势图,年份自动作为X轴,每列对应一个城市的趋势线
type_a_df.plot(ylabel="数值", title="Type A 各城市年度趋势")

2. 所有城市无差别绘制趋势图

可以选择将列名合并为「类型-城市」格式方便图例区分:

all_city_df = df.copy()
# 合并两级列名,避免图例显示为元组
all_city_df.columns = [f"{typ}-{city}" for typ, city in df.columns]
all_city_df.plot(ylabel="数值", title="所有城市年度趋势")

可选方案:Xarray 多维数据集

如果你的数据量级更大、后续还要扩展更多维度,也可以转成Xarray Dataset存储:

import xarray as xr

# 从Pandas多级表转成Xarray结构
ds = df.stack([*df.columns.names]).to_xarray()

# 筛选Type A绘图
ds.sel(类型="Type A").plot(hue="城市", x="年份")
# 所有城市绘图
ds.plot(hue="城市", x="年份")

方案优势

对比你之前考虑的「城市做列+单独维护类型元数据」的方案,多级索引/多维数组的方式直接把类型和城市的关联关系内置在数据结构中,无需额外维护映射表,筛选、计算、绘图都可以调用官方内置方法,不会出现映射错误的问题。

内容的提问来源于stack exchange,提问作者Rodrigo Silva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 18:45:06