1

我正在处理这个项目,我需要NaNreason列中填充一个单元格,但我需要先与列交叉检查status并填写适当的值。

条件是:

  • 如果STATUS是“已开票”并且REASONNaN,则填写“不适用”
  • 如果STATUS是“Lost Sale”并且REASONNaN,则填写“Unknown”

我试过这段代码:

data2 = np.where((data["SO_STATUS"] == "Invoiced")&(data["SO_LOSREASON"]=='NaN'),'null',"Not Applicable")
data2 = pd.DataFrame(data2, columns = ['SO_STATUS'])
data= data.join(data2)

但是,它说:

ValueError: columns overlap but no suffix specified: Index(['SO_STATUS'], dtype='object')

我不确定我所做的是否正确,因为我仍然需要reason列中不正确的其他数据NaN。非常感谢您的帮助!

4

2 回答 2

1

Try using direct column assignment:

data['SO_STATUS'] = np.where((data["SO_STATUS"] == "Invoiced") & data["SO_LOSREASON"].isna(),, "Not Applicable", "Unknown")
于 2021-09-26T11:31:33.667 回答
1

您可以使用mapand where,因此很容易添加任何其他条件:

data['new_column'] = (data['SO_STATUS'].map({'Invoiced': 'Not Applicable',
                                             'Lost Sale': 'Unknown',
                                             # add other here: 'Other': 'other',
                                            })
                                       .where(data['SO_LOSREASON'].isna())
                      )

示例(为清楚起见设置新列new_column):

   SO_STATUS SO_LOSREASON      new_column
0   Invoiced          NaN  Not Applicable
1  Lost Sale          NaN         Unknown
2      Other          NaN             NaN
3   Invoiced          abc             NaN
于 2021-09-26T12:29:42.860 回答