Python 在DataFrame中,将一列的值替换为另一列的值
我的数据帧如下所示:Python 在DataFrame中,将一列的值替换为另一列的值,python,pandas,dataframe,Python,Pandas,Dataframe,我的数据帧如下所示: sku boost1 boost2 boost3 boost4 0 a ffffdfg a fggg replace 1 b fff fff fff replace 2 c ddf b ddf replace 3 d dfgd dfgd d replace 对于每一行,如果“sku”的值与boost1或boost2或boost3的值相同,则我希望用boo
sku boost1 boost2 boost3 boost4
0 a ffffdfg a fggg replace
1 b fff fff fff replace
2 c ddf b ddf replace
3 d dfgd dfgd d replace
对于每一行,如果“sku”的值与boost1或boost2或boost3的值相同,则我希望用boost4中的值替换匹配值
例如:
sku boost1 boost2 boost3
0 a ffffdfg replace fggg
1 b fff fff fff
2 c ddf b ddf
3 d dfgd dfgd replace
我试过:
boosting_df.loc[boosting_df['boost1'] == boosting_df['sku'], 'boost1'] = boosting_df['boost4']
boosting_df.loc[boosting_df['boost2'] == boosting_df['sku'], 'boost2'] = boosting_df['boost4']
boosting_df.loc[boosting_df['boost2'] == boosting_df['sku'], 'boost3'] = boosting_df['boost4']
但我得到了以下错误:
ValueError: shape mismatch: value array of shape (4,) could not be broadcast to indexing result of shape (0,)
每个布尔掩码必须应用于赋值的两侧,以便维度和索引匹配:
for i in range(1, 4):
col = 'boost{}'.format(i)
mask = (df['sku'] == df[col])
df.loc[mask, col] = df.loc[mask, 'boost4']
输出:
sku boost1 boost2 boost3 boost4
0 a ffffdfg replace fggg replace
1 b fff fff fff replace
2 c ddf b ddf replace
3 d dfgd dfgd replace replace
.loc
也应该很好,这不是提供了与ix
相同的输出吗?是的,我的错误--.loc
很好。谢谢你指出:)