IndexError:布尔索引与索引数组不匹配
Posted
技术标签:
【中文标题】IndexError:布尔索引与索引数组不匹配【英文标题】:IndexError: Boolean Index did not match indexed array 【发布时间】:2021-08-31 17:12:17 【问题描述】:我正在尝试以特定方式解决此问题。希望得到有关如何进行的指示。
我有df1,即:
df1 = pd.DataFrame('Model': ['model1', 'model2', 'model3'])
然后是df2,也就是:
model1 = pd.DataFrame('Model' : ['model1', 'model1', 'model1'],
'Rule' : ['High', 'Low', 'High'],
'Name' : ['A', 'B', 'C'])
model2 = pd.DataFrame('Model' : ['model2', 'model2', 'model2'],
'Rule' : ['Low', 'Low', 'High'],
'Name' : ['B', 'D', 'F'])
model3 = pd.DataFrame('Model' : ['model3', 'model3', 'model3'],
'Rule' : ['High', 'High', 'High'],
'Name' : ['D', 'E', 'F'])
df2 = [model1, model2, model3]
然后是df3,也就是:
df3 = pd.DataFrame('Name' : ['A', 'B', 'C', 'D', 'E', 'F'],
'model1' : [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan,],
'High1' : [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan,],
'Low1' : [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan,],
'model2' : [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan,],
'High2' : [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan,],
'Low2' : [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan,],
'model3' : [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan,],
'High3' : [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan,],
'Low3' : [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan,])
我希望输出如下所示:
df3 = pd.DataFrame('Name' : ['A', 'B', 'C', 'D', 'E', 'F'],
'model1' : ['Yes', 'Yes', 'Yes', np.nan, np.nan, np.nan,],
'High1' : [0, np.nan, 0, np.nan, np.nan, np.nan,],
'Low1' : [np.nan, 0, np.nan, np.nan, np.nan, np.nan,],
'model2' : [np.nan, 'Yes', np.nan, 'Yes', np.nan, 'Yes',],
'High2' : [np.nan, np.nan, np.nan, np.nan, np.nan, 0,],
'Low2' : [np.nan, 0, np.nan, 0, np.nan, np.nan,],
'model3' : [np.nan, np.nan, np.nan, 'Yes', 'Yes', 'Yes',],
'High3' : [np.nan, np.nan, np.nan, 0, 0, 0,],
'Low3' : [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan,])
这是我的代码:
for model in df1['Model']:
col_index = df3.columns.get_loc(model)
df3.iloc[df3['Name'].isin(df2[model]['Name']), col_index] = 'Yes'
df3.iloc[df3['Name'].isin(df2[model]['Name']) & (df2[model]['Rule']=='High'), col_index+1] = 0
df3.iloc[df3['Name'].isin(df2[model]['Name']) & (df2[model]['Rule']=='Low'), col_index+2] = 0
这给了我以下错误:
IndexError: boolean index did not match indexed array along dimension 0; dimension is 389 but corresponding boolean dimension is 853
我假设这是由 (df2[model]['Rule']=='High') 引起的,其中 'High' 是一个标量。
注意:我希望代码使用上面代码中所示的 for 循环完成此操作,因为它有助于我正在做的其他事情。
【问题讨论】:
我编辑了问题以更好地解释我的问题。原始帖子做得不好,并且没有数据集的可重现代码。编辑解决了这个问题。 【参考方案1】:我认为你只是在寻找支点
df3.pivot('Name', 'Property', 'Name').notnull()
Property colA colB colC
Name
A True True False
B False False True
C True False True
【讨论】:
你能帮我理解我的代码有什么问题吗?我真的需要修复索引错误并将我的 for 循环代码应用到更大的数据集。以上是关于IndexError:布尔索引与索引数组不匹配的主要内容,如果未能解决你的问题,请参考以下文章
IndexError:数组的索引过多。具有 42 个特征的 Numpy 数组不均匀