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
相关产品推荐
相关产品推荐

