我正在尝试创建一个标志变量(即,一个新的具有二进制值的列,比如1代表True,0代表False)——我尝试了np.where
(as per this post)和{
与数据框。在哪里使用:
df.where(((df['MOSL_Rating'] == 'Highly Effective') & (df['MOTP_Rating'] == 'Developing')) | ((df['MOSL_Rating'] == 'Highly Effective') & (df['MOTP_Rating'] == 'Ineffective')) | ((df['MOSL_Rating'] == 'Effective') & (df['MOTP_Rating'] == 'Ineffective')) | ((df['MOSL_Rating'] == 'Ineffective') & (df['MOTP_Rating'] == 'Highly Effective')) | ((df['MOSL_Rating'] == 'Ineffective') & (df['MOTP_Rating'] == 'Effective')) | ((df['MOSL_Rating'] == 'Developing') & (df['MOTP_Rating'] == 'Highly Effective')), df['disp_rating'], 1, axis=1)
但这将返回ValueError: For argument "inplace" expected type bool, received type int.
如果我将代码从df['disp_rating'], 1, axis=1
改为df['disp_rating'], True, axis=1
,它将返回TypeError: Cannot do inplace boolean setting on mixed-types with a non np.nan value
我也尝试过np.where
,但返回{
我也读过this question,看起来很相似。但是,当我使用这里提供的解决方案时,它返回:
KeyError: 'disp_rating'
如果我提前创建了变量(为了避免Key Error
),我只会得到另一个关于其他东西的错误。在
我以为根据一些基本条件创建一个新变量会非常简单,但是我已经坚持了一段时间,并且没有真正取得任何进展,尽管阅读了文档和许多SO帖子。在
编辑:为了更加明确,我正在尝试创建一个新列(名为“disp_rating”),基于同一df中的其他两个列(“MOSL_rating”和“MOTP_rating”)中的值是否满足某些条件。我只有一个数据帧,所以我不想比较两个数据帧。 在SQL中我将使用CASE WHEN语句,在SAS中我将使用IF/THEN/ELSE语句。在
我的测向一般是这样的:
^{pr2}$
我找不到where不起作用的原因,但有一个办法:
创建代码以创建df:
我可以创建df:
^{pr2}$还有第二个:
然后我创建您的测试:
然后在满足条件的情况下,用第二个数据帧更新第一个数据帧的值:
您的逻辑过于复杂,可以通过
set
进行简化/优化。下面是一个演示。在相关问题 更多 >
编程相关推荐