Numpy报错:值长度(1191)与索引长度(1250)不匹配问题求助
问题根源
- 你当前在
groupby('Operator').apply的回调函数内,入参g是单个Operator对应的历史分组数据,长度为1191,因此基于g['Operator']生成的条件列表长度也为1191,np.select返回的数组长度自然和g一致为1191 - 你创建的
future是长度为1250的未来预测数据集,两者长度不匹配,赋值时直接触发报错 - 额外说明:整个
g分组的Operator值完全相同,不需要用np.select逐行判断,属于逻辑冗余
修复方案
直接判断当前分组的Operator值,给future列赋值标量即可,Pandas会自动把标量广播到整个列的所有行,和你给cap赋值的逻辑一致:
future = m.make_future_dataframe(periods=1250,freq='D', include_history=False) # 直接取当前分组的Operator值判断即可 current_op = g['Operator'].iloc[0] if current_op in [100151, 20137, 20147]: future['floor'] = g['y'].mean()/2 else: # 可自行设置其他Operator对应的floor默认值,比如0 future['floor'] = 0 future['cap'] = max(g['y'])*1.25 forecast = m.predict(future)
补充说明
你之前future['cap']赋值正常是因为赋值的是单个标量值,Pandas会自动把标量广播到整个1250行的列上;而np.select返回的是长度1191的数组,无法自动广播匹配长度,因此触发报错。如果后续确实需要给future的不同行设置不同的floor值,需要保证生成的数组长度和future的长度1250完全一致。
内容的提问来源于stack exchange,提问作者smith56
相关产品推荐
相关产品推荐

