有两个数据框具有相同的列,索引和列的顺序是相同的。我称之为tableA和tableB。
tableA = pd.DataFrame({'col1':[np.NaN,1,2],'col2':[2,3,np.NaN]})
tableB = pd.DataFrame({'col1':[2,4,2],'col2':[2,3,5]})
tableA tableB
col1 col2 col1 col2
0 na 2 0 2 2
1 1 3 1 4 5
2 2 na 2 2 5
我想将tableB的某些值替换为' NA' tableA的相同位置的值是na。 现在,我使用循环逐列。
for n in range(tableB.shape[1]):
tableB.iloc[:,n] = tableB.iloc[:,n].where(pd.isnull(tableA.iloc[:,n])==False,'NA')
tableB
col1 col2
0 NA 2
1 4 5
2 2 NA
有没有其他方法可以不使用循环?我尝试过使用替换但它只能更改第一列。
tableB.replace(pd.isnull(tableA), 'NA', inplace=True) #only adjust the first column.
感谢您的帮助!
答案 0 :(得分:0)
您可以使用mask
In [7]: tableB.mask(tableA.isnull())
Out[7]:
col1 col2
0 NaN 2.0
1 4.0 3.0
2 2.0 NaN
答案 1 :(得分:0)
我认为您需要where
或numpy.where
:
<强> 1 强>
df = tableB.where(tableA.notnull())
print (df)
col1 col2
0 NaN 2.0
1 4.0 3.0
2 2.0 NaN
<强> 2 强>
df = pd.DataFrame(np.where(tableA.notnull(), tableB, np.nan),
columns=tableB.columns,
index=tableB.index)
print (df)
col1 col2
0 NaN 2.0
1 4.0 3.0
2 2.0 NaN
答案 2 :(得分:0)
function Test()
{
var viewbagval = $("#viewbagid").val();
}