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

Pandas处理逆变器功率DataFrame实现按列名分类数值的咨询

你当前代码的问题出在最后一步的drop('level_1', 1)操作:这一步直接删掉了stack()生成的、存储原始列名(INV1~INV20)的字段,导致无法匹配数值对应的逆变器编号。
只需保留该字段并重命名即可实现需求,修改后的代码如下:

保留Time列版本(匹配你转换后的初步结构)

inv_power = inv_power.set_axis(['Timestamp', 'Time', 'INV1','INV2','INV3','INV4','INV5','INV6','INV7','INV8','INV9','INV10', 'INV11','INV12','INV13','INV14','INV15','INV16','INV17','INV18','INV19','INV20'], axis=1) 

inv_power = inv_power.replace('', np.nan)\
            .set_index(['Timestamp', 'Time'])\
            .stack()\
            .reset_index(name='AC_Power')\
            .rename(columns={'level_2': 'Inverter_No'})

不需要Time列版本

如果你最终结果不需要保留Time字段,可使用如下简化写法:

inv_power = inv_power.set_axis(['Timestamp', 'Time', 'INV1','INV2','INV3','INV4','INV5','INV6','INV7','INV8','INV9','INV10', 'INV11','INV12','INV13','INV14','INV15','INV16','INV17','INV18','INV19','INV20'], axis=1) 

inv_power = inv_power.replace('', np.nan)\
            .set_index('Timestamp')\
            .stack()\
            .reset_index(name='AC_Power')\
            .rename(columns={'level_1': 'Inverter_No'})

核心调整说明

  • 将需要保留的非逆变器数值列加入set_index的参数中,避免转换过程中丢失
  • 取消删除stack生成的层级列,直接重命名为逆变器编号字段,即可自动关联每一个数值对应的原始列名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:15:10