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:数组索引过多”

IndexError:数组的索引过多。具有 42 个特征的 Numpy 数组不均匀

IndexError:数组的索引过多

IndexError:数组的索引过多:数组是二维的,但有 3 个被索引

SVC 的网格搜索:IndexError:数组索引过多

获取索引数组,在另一个数组中找到匹配的索引并替换值