There is a Pandas dataframe df
.
df.info()
---
<class 'pandas.core.frame.DataFrame'>
Int64Index: 3 entries, 1 to 3
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 0 3 non-null int64
1 1 3 non-null int64
2 2 3 non-null int64
dtypes: int64(3)
memory usage: 96.0 bytes
Survived | 0 | 1 | 2 |
---|---|---|---|
Pclass | |||
1 | 80 | 136 | 216 |
2 | 97 | 87 | 184 |
3 | 372 | 119 | 491 |
Dividing 1st and 2nd columns with the 3rd column cause Nan. Why is it?
df[[0, 1]].div(df[[2]], axis=0)
Survived | 0 | 1 | 2 |
---|---|---|---|
Pclass | |||
1 | NaN | NaN | NaN |
2 | NaN | NaN | NaN |
3 | NaN | NaN | NaN |
>Solution :
Because divide by one column DataFrame
by DataFrame.div
with different column name 2
like 0,1
columns names.
print (type(df[[2]]))
<class 'pandas.core.frame.DataFrame'>
print (df[[2]])
2
Survived
1 216
2 184
3 491
#divide by 0 column from rename
print (df[[0, 1]].div(df[[2]].rename(columns={2:0}), axis=0))
0 1
Survived
1 0.370370 NaN
2 0.527174 NaN
3 0.757637 NaN
#divide by 0 column from rename
print (df[[0, 1]].div(df[[2]].rename(columns={2:1}), axis=0))
0 1
Survived
1 NaN 0.629630
2 NaN 0.472826
3 NaN 0.242363
For correct output need divide by Series
by Series.div
:
print (type(df[2]))
<class 'pandas.core.series.Series'>
print (df[2])
Survived
1 216
2 184
3 491
Name: 2, dtype: int64
out = df[[0, 1]].div(df[2], axis=0)
print (out)
0 1
Survived
1 0.370370 0.629630
2 0.527174 0.472826
3 0.757637 0.242363