How to multiply two columns of a Dataframe?

Question:

Good afternoon, I am trying to multiply two columns of a dataframe (C). And add the results to a new column. I have tried different methods but none work. The most common error I encounter is:

TypeError: can't multiply sequence by non-int of type 'float'

The columns that a i want to multiply are: H04_PEDRO_MARIN and SS(mg/l). And also i want to create a new column with the results.

C:
                H04_PEDRO_MARIN SS(mg/l)  multiplication
Fecha
26/07/11 14:00         0.000000     80.4        0.000000
26/07/11 15:00         0.000000     76.1        0.000000
26/07/11 16:00         0.000000        0        0.000000
26/07/11 17:00         0.000000        0        0.000000
26/07/11 18:00         0.000000        0        0.000000
...                         ...      ...             ...
12/04/12 10:00      9430.166667    61.18     9430.166667
12/04/12 11:00      9430.166667    60.05     9430.166667
12/04/12 12:00      9430.166667    59.43     9430.166667
12/04/12 14:00      9430.166667    56.98     9430.166667

[11568 rows x 3 columns]

I have tried:

C['multiplicaction'] = C['H04_PEDRO_MARIN'][1])*(C['SS(mg/l)'])

And

cols = ['H04_PEDRO_MARIN','SS(mg/l)']
C['multiplication'] = C[cols].prod(axis=1)

And donĀ“t work

Even i have tried to separate both columns in different dataframes and multiply and don’t work again.

Thanks for any solution.

Asked By: Guille GL

||

Answers:

Check your columns astype: C.info().
To solve the TypeError: can’t multiply sequence by non-int of type float error, convert the string into a floating-point number before multiplying it with a float. If you convert the string "3" to a float before multiplying it with the floating-point number 3.3 , there will be no error.

You can do this:

import pandas as pd

data = {
    'H04_PEDRO_MARIN': [0.0, 0.0, 0.0, 0.0, 0.0, 9430.166667, 9430.166667, 9430.166667, 9430.166667],
    'SS(mg/l)': [80.4, 76.1, 0.0, 0.0, 0.0, 61.18, 60.05, 59.43, 56.98]
}
C = pd.DataFrame(data, index=['26/07/11 14:00', '26/07/11 15:00', '26/07/11 16:00', '26/07/11 17:00', '26/07/11 18:00', '12/04/12 10:00', '12/04/12 11:00', '12/04/12 12:00', '12/04/12 14:00'])

C['multiplication'] = C['H04_PEDRO_MARIN'] * C['SS(mg/l)']

print(C)

which givs

                H04_PEDRO_MARIN  SS(mg/l)  multiplication
26/07/11 14:00         0.000000     80.40        0.000000
26/07/11 15:00         0.000000     76.10        0.000000
26/07/11 16:00         0.000000      0.00        0.000000
26/07/11 17:00         0.000000      0.00        0.000000
26/07/11 18:00         0.000000      0.00        0.000000
12/04/12 10:00      9430.166667     61.18   576937.596687
12/04/12 11:00      9430.166667     60.05   566281.508353
12/04/12 12:00      9430.166667     59.43   560434.805020
12/04/12 14:00      9430.166667     56.98   537330.896686

if you have trouble with datatypes, change to

C['H04_PEDRO_MARIN'] = pd.to_numeric(C['H04_PEDRO_MARIN'], errors='coerce')
C['SS(mg/l)'] = pd.to_numeric(C['SS(mg/l)'], errors='coerce')
C['multiplication'] = C['H04_PEDRO_MARIN'] * C['SS(mg/l)']

Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.