如果另一列中的值等于特定值,我尝试替换多个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
答案 0 :(得分:3)
如果要选择所有数字列,然后按条件使用np.integer
设置空字符串,则将select_dtypes
与np.number
或loc
一起使用:
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