Pandas 根据另一列替换条件值

Pandas 根据另一列替换条件值,pandas,if-statement,Pandas,If Statement,我有一个如下所示的数据帧: col1 col2 Yes 23123 No 23423423 Yes 34234 No 13213 我想替换col2中的值,这样如果col1中的“是”,则返回空白,如果“否”,则返回初始值 我想看看这个: col1 col2 Yes No 23423423 Yes No 13213 我已尝试过此方法,但“否”没有返回任何结果: def map_value(x): if x in ['Yes']:

我有一个如下所示的数据帧:

col1 col2
Yes  23123
No   23423423
Yes  34234
No   13213
我想替换col2中的值,这样如果col1中的“是”,则返回空白,如果“否”,则返回初始值

我想看看这个:

 col1 col2
 Yes  
 No   23423423
 Yes  
 No   13213
我已尝试过此方法,但“否”没有返回任何结果:

   def map_value(x): 
      if x in ['Yes']:
         return ''
      else:
         return None

   df['col2'] = df['col1'].apply(map_value)

有很多方法可以做到这一点,其中之一就是

df.loc[df.col1 == 'Yes', 'col2'] = ''
输出:

col1 col2
Yes  
No   23423423
Yes  
No   13213

通过从OP的post复制样本数据并使用以下命令创建
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 

你可以用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