微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – Pandas DataFrame,用另一列的值替换列的值

我的boosting_df 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相同,那么我想用匹配值替换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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐