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

标签 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,)

最佳答案

每个 bool 掩码都必须应用于分配的两侧,以便维度和索引匹配:

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

关于python - Pandas DataFrame,用另一列的值替换一列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27897559/

相关文章:

python - 使用 boolean 逻辑合并和过滤一个数据帧的多列

python - 在 for 循环中一次创建多个数据帧

python - 如何将许多列的产品创建为新列 pandas

Python将html插入mysql?

python - 有没有一种方法可以在 pandas/numpy 中使用升序逻辑进行前向填充?

python - 具有特殊规则的 Pandas agg 数组

r - 如何将堆叠的长数据帧转换为宽格式

python - 如何转发/填充 Pandas DataFrame 列/系列中的特定值?

Python Pandas切片各种数据类型

python - 使用 `abort(404)` 时引发 TypeError