基于另一列的条件,使用 pandas 替换值

4

我有一个数据框看起来像这样:

col1 col2
Yes  23123
No   23423423
Yes  34234
No   13213

我希望替换col2中的值,如果col1中是'Yes',则返回空值,如果是'No',则返回初始值。

我想看到这个:

 col1 col2
 Yes  
 No   23423423
 Yes  
 No   13213

我尝试过这个方法,但是返回的是None而不是No:
   def map_value(x): 
      if x in ['Yes']:
         return ''
      else:
         return None

   df['col2'] = df['col1'].apply(map_value)
3个回答

18

有许多方法可以处理这个问题,其中之一是

df.loc[df.col1 == 'Yes', 'col2'] = ''

输出:

col1 col2
Yes  
No   23423423
Yes  
No   13213

2
你可以使用numpy来完成这个任务。
import pandas as pd
import numpy as np
d = {'col1': ['yes', 'no', 'yes', 'no'], 'col2': [23123,23423423,34234,13213]}
df = pd.DataFrame(data=d)
df['col2'] = np.where(df.col1 == 'yes', '', df.col2)
df

1

通过从OP的帖子中复制示例数据并使用以下命令创建了 df

df=pd.read_clipboard();
df
   col1  col2
0  Yes   23123 
1  No    23423423 
2  Yes   34234 
3  No    13213 

请您尝试以下内容。
m=df['col1']=='No'
df['col2']=df['col2'].where(m,'')
df

运行代码后输出如下:
  col1 col2
0 Yes
1 No   23423423 
2 Yes  
3 No   13213 

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