根据另一列中的值替换pandas df中的值

时间:2018-08-08 04:23:10

标签: python pandas replace

如果另一列中的值等于特定值,我尝试替换多个columns中的值。对于下面的df,如果integers

,我要替换所有的Col A is == ABC将为空值
import pandas as pd

df = pd.DataFrame({          
    'B' : [10,20,30,40,50],
    'A' : ['ABC','DEF','XYZ','ABC','DEF'],          
    'C' : [1,1,1,1,1],              
    })

输出:

    B    A  C
0  10  ABC  1
1  20  DEF  1
2  30  XYZ  1
3  40  ABC  1
4  50  DEF  1

所以我想在A等于ABC时替换Col B,C中的整数。我已经尝试过了

mask = df.A != 'ABC'
col = ['B','C']
df = df.loc[mask, col].replace('')

但是它仅选择我要替换的值。我希望产生:

    B    A  C
0  10  ABC  1
1      DEF   
2      XYZ   
3  40  ABC  1
4      DEF   

3 个答案:

答案 0 :(得分:3)

如果要选择所有数字列,然后按条件使用np.integer设置空字符串,则将select_dtypesnp.numberloc一起使用:

mask = df.A != 'ABC'
#if want select all integer columns
col = df.select_dtypes(np.integer).columns
#if want select columns by names
#col = ['B','C']
df.loc[mask, col] = ''
print (df)
    B    A  C
0  10  ABC  1
1      DEF   
2      XYZ   
3  40  ABC  1
4      DEF   

答案 1 :(得分:1)

您可以使用

In [189]: df[['B', 'C']] = df[['B', 'C']].where(df.A.eq('ABC'), '')

In [190]: df
Out[190]:
    B    A  C
0  10  ABC  1
1      DEF
2      XYZ
3  40  ABC  1
4      DEF

答案 2 :(得分:0)

熊猫apply

import pandas as pd

df = pd.DataFrame({          
    'B' : [10,20,30,40,50],
    'A' : ['ABC','DEF','XYZ','ABC','DEF'],          
    'C' : [1,1,1,1,1],              
    })
print(df.apply(lambda row: [i if isinstance(i,str) else '' for i in row.tolist()] if row['A']!='ABC' else row,axis=1))

输出:

     A   B  C
0  ABC  10  1
1  DEF       
2  XYZ       
3  ABC  40  1
4  DEF