How to treat NaN or non aligned values as 1s or 0s in multiplying pandas DataFrames

Viewed 259

I want to treat non aligned or missing (NaN, Inf, -Inf) values as 1s or 0s.

df1 = pd.DataFrame({"x":[1, 2, 3, 4, 5], 
    "y":[3, 4, 5, 6, 7]}, 
    index=['a', 'b', 'c', 'd', 'e'])

df2 = pd.DataFrame({"y":[1, NaN, 3, 4, 5], 
    "z":[3, 4, 5, 6, 7]}, 
    index=['b', 'c', 'd', 'e', 'f'])

Above code results in the following

df1 * df2
    x     y   z
a NaN   NaN NaN
b NaN   4.0 NaN
c NaN   NaN NaN
d NaN  18.0 NaN
e NaN  28.0 NaN
f NaN   NaN NaN

I want to ignore NaNs and also treat non aligned values as 1s in either the left or right DF or both.

E.g.

Case 1: Replace missing or misaligned value in df1 with 1

df1 * df2
    x     y   z
a   1     3 NaN
b   2   4.0 NaN
c   3     5 NaN
d   4  18.0 NaN
e   5  28.0 NaN
f NaN   NaN NaN

Case 2: Replace missing or misaligned value in df2 with 1

df1 * df2
    x     y   z
a NaN   NaN NaN
b NaN   4.0   3
c NaN   NaN   4
d NaN  18.0   5
e NaN  28.0   6
f NaN     5   7

Case 3: Replace any missing or misaligned value with 1 if there is a value in the other DF.

df1 * df2
    x     y   z
a   1     3 NaN
b   2   4.0   3
c   3     5   4
d   4  18.0   5
e   5  28.0   6
f NaN     5   7

In the case of addison, I want to treat the missing or miss aligned values as 0s.

2 Answers
Related