熊猫数据框掩码以将值写入新列

bet*_*eta 4 python mask dataframe pandas

基于此解决方案,我在Pandas数据帧上创建了几个遮罩,以创建一个新列,该列应由不同的列填充(基于条件)。

(简化的)代码如下所示:

mask0 = (df['condition'] == 1)
mask1 = (df['condition'] == 0)

df.loc[mask0, 'newColumn'] = df['otherColumn1']
df.loc[mask1, 'newColumn'] = df['otherColumn2']
Run Code Online (Sandbox Code Playgroud)

但是,在执行第三行时,出现以下错误:

ValueError:无法从重复的轴重新索引

如果我只是这样做,它就可以工作:

df.loc[mask0, 'newColumn'] = 1
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

jez*_*ael 5

您必须在两面都进行过滤:

mask0 = (df['condition'] == 1)
mask1 = (df['condition'] == 0)

df.loc[mask0, 'newColumn'] = df.loc[mask0, 'otherColumn1']
df.loc[mask1, 'newColumn'] = df.loc[mask1, 'otherColumn2']
Run Code Online (Sandbox Code Playgroud)

但是这里最好numpy.select避免重复代码:

df['newColumn'] = np.select([mask0, mask1], 
                            [df['otherColumn1'], df['otherColumn2']], 
                            default=np.nan)
Run Code Online (Sandbox Code Playgroud)