修复代码以摆脱 ValueError: cannot set using a multi-index selection indexer with different length

Vin*_*eet 7 python pandas

当我尝试从另一列的值有条件地更新数据框列时,出现以下错误。

ValueError: cannot set using a multi-index selection indexer with a different length than the value.
Run Code Online (Sandbox Code Playgroud)

花了几个小时后,我一直无法找出原因。这是演示问题的简化代码:

dfm = pd.DataFrame({'jim': [0, 0, 1, 1],
                    'joe': ['x', 'y', 'z', 'y'],
                    'jolie': np.random.rand(4), 
                    'folie': np.random.rand(4)})

dfm = dfm.set_index(['jim', 'joe'])

dfm.loc[(dfm['jolie'] == 1) , 'jolie'] = dfm['folie']
Run Code Online (Sandbox Code Playgroud)

一旦我删除了索引,上面的最后一行代码就起作用了。我的问题是:我做错了什么?可以在不删除索引的情况下修复上述代码吗?这是熊猫中的错误吗?我会很感激你的帮助。

Qua*_*ang 5

这里的问题很可能是因为 的长度与dfm.loc[(dfm['jolie'] == 1) , 'jolie']的不同,dfm['folie']因为前者只查看dfm['jolie'].

此外,在将一个系列的值分配给另一个时,两者的索引必须匹配,无论它们是单索引还是多索引。

例如,以下将起作用:

dfm.loc[(dfm['jolie'] == 1) , 'jolie'] = dfm.loc[(dfm['jolie'] == 1) ,'folie']
Run Code Online (Sandbox Code Playgroud)