pandas DataFrame set value on boolean mask

前端 未结 4 1238
隐瞒了意图╮
隐瞒了意图╮ 2020-12-18 20:07

I\'m trying to set a number of different in a pandas DataFrame all to the same value. I thought I understood boolean indexing for pandas, but I haven\'t found any resources

4条回答
  •  醉话见心
    2020-12-18 20:47

    If you want to use different columns to create your mask, you need to call the values property of the dataframe.


    Example

    Let's say we want to, replace values in A_1 and 'A_2' according to a mask in B_1 and B_2. For example, replace those values in A (to 999) that corresponds to nulls in B.

    The original dataframe:

       A_1  A_2  B_1  B_2
    0    1    4    y    n
    1    2    5    n  NaN
    2    3    6  NaN  NaN
    

    The desired dataframe

       A_1  A_2  B_1  B_2
    0    1    4    y    n
    1    2  999    n  NaN
    2  999  999  NaN  NaN
    

    The code:

    df = pd.DataFrame({
         'A_1': [1, 2, 3], 
         'A_2': [4, 5, 6], 
         'B_1': ['y', 'n', np.nan], 
         'B_2': ['n', np.nan, np.nan]})
    
    _mask = df[['B_1', 'B_2']].notnull().values
    df[['A_1', 'A_2']] = df[['A_1','A_2']].where(_mask, other=999)
    
    
    
       A_1  A_2
    0    1    4
    1    2  999
    2  999  999
    

提交回复
热议问题