Ryszard Eggink
Ryszard Eggink

Reputation: 183

How to zero values in dataframe based on values in another dataframe

Let's say I have two dataframes of the same size, one with values:

d1 = {'values1': [1, 1,2,2], 'values2': [10, 50,200,100]}
df1 = pd.DataFrame(data=d1)

And a dataframe of booleans:

d2 = {'boolean1': [True, False,True,True], 'boolean2': [False, False,False,True]}
df2 = pd.DataFrame(data=d2)

How can I repplace values in df1 to zeros where booleans are True?

The result I am looking for is:

r = {'values1': [0, 1,0,0], 'values2': [10, 50,200,0]}
result = pd.DataFrame(data=r)

Upvotes: 1

Views: 56

Answers (1)

jezrael
jezrael

Reputation: 862901

Because differnt columns names between both DataFrames use DataFrame.mask with converting df2 to numpy array:

result = df1.mask(df2.to_numpy(), 0)
print (result)
   values1  values2
0        0       10
1        1       50
2        0      200
3        0        0

If set columns names in boolean DataFrame - same columns in both DataFrames is not necessary convert to numpy array:

result = df1.mask(df2.set_axis(df1.columns, inplace=False, axis=1), 0)
print (result)

   values1  values2
0        0       10
1        1       50
2        0      200
3        0        0

Upvotes: 4

Related Questions