Pandas DataFrame,用另一列的值替换某一列的值

4

我的 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,)
1个回答

3
每个布尔掩码都必须应用于赋值的两侧,以使维度和索引匹配:
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 相同的输出吗? - joris
是的,我的错误——.loc 完全没问题。谢谢指出 :) - YS-L

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接