Curious Student
Curious Student

Reputation: 695

Issue dividing one dataframe by another

I have rewritten this question several times now as I thought I had solved the issue, however it appears not. I am currently trying to loop through columns of df1 and df2, dividing one column by the other to populate columns of a new df3 but I am having the issue that that all my cells are NaN.

My code for the loop is as follows:

#Divide One by the Other. Set up for loop
i = 0
for country in df3.columns:    
    df3[country] = df1.iloc[:, [i]].div(df2.iloc[:, [i]])
    i += 1

The resulting df3 is a matrix full of NaNs only.

My df1 is of the structure:

enter image description here

And my df2 of the structure:

enter image description here

And I am creating my df3 as:

df3 = pd.DataFrame(index = df1.index, columns=tickers.index)

Which looks like (before population):

enter image description here

The only potential issue is the multi index in df3 perhaps? Struggling to see why they don't divide through.

Upvotes: 1

Views: 2779

Answers (1)

cs95
cs95

Reputation: 402813

The reason why your current approach does not work is because you're dividing pd.Series objects. pandas automatically tries to align the indices when dividing. Here's an example.

df1

5    0
4    1
3    2
2    3
1    4
dtype: int64

df2

5    0
6    1
7    2
8    3
9    4
dtype: int64

df1 / df2    # you'd expect all 1's in each row, but...

1   NaN
2   NaN
3   NaN
4   NaN
5   NaN
6   NaN
7   NaN
8   NaN
9   NaN
dtype: float64

Ensure that you have the same number of rows and columns in df1 and df2, and then this should becomes easy if you divide the np.array counterparts of the dataframes.

v = df1.values / df2.values
df3 = pd.DataFrame(v, index=df1.index, columns=tickers.index)

Upvotes: 6

Related Questions