python - IndexError:布尔索引与索引数组不匹配
问题描述
我正在尝试以特定方式解决此问题。希望得到有关如何进行的指示。
我有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 循环来完成此操作,因为它有助于我正在做的其他事情。
解决方案
我想你只是在寻找支点
df3.pivot('Name', 'Property', 'Name').notnull()
Property colA colB colC
Name
A True True False
B False False True
C True False True
推荐阅读
- asp.net-mvc - 将应用程序发布到 Azure 网站后出现问题
- shell - 使用 shell 脚本在另一个文件中搜索文件的确切内容
- jquery - 在烧瓶中将服务器端生成的数据实时发送到客户端的最佳方式是什么?
- python - 删除 SQLite3 (dbBrowser) 中 id 与某个输入匹配的字段
- php - 一些变量失败 - Json Laravel
- python - 如何以多线程方式将硒与python一起使用
- python - Matplotlib - 来自已创建图的子图
- python - 将 Tkinter 滚动条跳转到某个小部件
- matlab - 如何使用“dicomwrite”命令将多个 dicom 文件写入文件夹
- javascript - 如何将回调数据传递给 koa ctx.body?