根据其他数据框替换值

时间:2017-08-16 04:57:52

标签: python pandas dataframe replace

有两个数据框具有相同的列,索引和列的顺序是相同的。我称之为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.

感谢您的帮助!

3 个答案:

答案 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)

我认为您需要wherenumpy.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();
}