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

如何按列名拆分hpa、upc维度,将二维DataFrame转为三维?

转换为多级索引DataFrame实现多维度筛选

第一步:还原你的原始DataFrame

先把你提供的数据用pandas构建出来(方便后续操作):

import pandas as pd
import numpy as np

# 构建原始数据
data = {
    'hpa02upc00': [58.28, np.nan, np.nan],
    'hpa01upc01': [58.23, np.nan, np.nan],
    'hpa01upc00': [58.95, 58.16, np.nan],
    'hpa00upc02': [58.09, np.nan, np.nan],
    'hpa00upc01': [58.84, 58.06, np.nan],
    'hpa00upc00': [np.nan, 58.85, 58.08]
}

df = pd.DataFrame(data, index=[0, -1, -2])
df.index.name = 'pwr'

第二步:拆分列名为多级索引(hpa + upc)

核心是把hpaXXupcXX格式的列名拆成hpa和upc两个层级,这样就能直接按这两个维度筛选:

# 用正则提取列名中的hpa和upc编号
df.columns = df.columns.str.extract(r'hpa(\d+)upc(\d+)', expand=True)
# 给多级列设置名称,方便后续识别
df.columns.names = ['hpa', 'upc']

处理后的DataFrame结构会变成:

hpa     02    01       01       00       00       00
upc     00    01       00       02       01       00
pwr                                                 
0    58.28  58.23  58.95  58.09  58.84      NaN
-1     NaN    NaN  58.16    NaN  58.06    58.85
-2     NaN    NaN    NaN    NaN    NaN    58.08

第三步:按hpa/upc维度筛选数据

1. 筛选指定hpa的所有列

比如提取hpa=00的所有数据:

hpa00_data = df.xs('00', level='hpa', axis=1)

2. 筛选指定upc的所有列

比如提取upc=00的所有数据:

upc00_data = df.xs('00', level='upc', axis=1)

3. 同时筛选hpa和upc的组合

比如提取hpa=01且upc=00的列:

specific_col = df[('01', '00')]

可选:转成长表格式(更灵活的多维度筛选)

如果需要更自由的行级筛选,可以把宽表转成长表,将hpa、upc转为列:

long_df = df.stack(level=['hpa', 'upc']).reset_index(name='value')

转后的长表结构:

pwr hpa upc  value
0     0  02  00  58.28
1     0  01  01  58.23
2     0  01  00  58.95
3     0  00  02  58.09
4     0  00  01  58.84
5    -1  01  00  58.16
6    -1  00  01  58.06
7    -1  00  00  58.85
8    -2  00  00  58.08

此时可以用布尔索引做复杂筛选,比如找pwr=-1且hpa=00的数据:

filtered_data = long_df[(long_df['pwr'] == -1) & (long_df['hpa'] == '00')]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:26:00