繁体   English   中英

如何根据另一列中的值在一列中填充 NaN?

[英]How to fill NaN in a column based on the values in another column?

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

条件是:

  • 如果STATUS为“Invoiced”且REASONNaN ,则填写“Not Applicable”
  • 如果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的其他数据。 非常感谢您的帮助!

尝试使用直接列分配:

data['SO_STATUS'] = np.where((data["SO_STATUS"] == "Invoiced") & data["SO_LOSREASON"].isna(),, "Not Applicable", "Unknown")

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM