dimanche 29 mars 2020

if statement dataframe python [duplicate]

I am trying to calculate a value and making a if statement based on Product, but I could not find a good and easy why how it should work. I am just receiving an error but no proper solution. Maybe someone knows how to fix it?

The code looks like the following:

import pandas as pd
import numpy as np

df = pd.DataFrame({'Date' : ['11/8/2011', '11/8/2011', '11/8/2011'],
                   'ID' : ['ID 1', 'ID 2', 'ID 3'],
                   'A' : [100, 200, 50],
                   'B' : [0.2, 0.5, 0.9],
                   'C' : [0.02, 0.05, 0.09],
                   'Product' : ['P1', 'P2', 'P1'],
                   'Type' : ['Food', 'Non-Food', 'Food']
                  })
def calc_1(df):
    calc = np.log(df['A'] / df['B']) + (df['C'])
    return calc

def calc_2(df):
    calc2 = 0.0
    d1_calc = 0.0

    d1_calc = calc_1(df)

    if df['Product'] == 'P1':
        if df['Type'] == 'Food':
            calc2 = d1_calc*np.log(df['A']/(df['B']*df['C']))

    elif df['Product'] == 'P2':
        if df['Type'] == 'Non-Food':
            calc2 = d1_calc*np.exp(df['A']/(df['B']*df['C'])) 
    else:
        raise Exception('No Calc')
    return calc2

calculation = calc_2(df)
print(calculation)

I am getting the following error message:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-13-d5a5d719b0f8> in <module>
----> 1 calculation = calc_2(df)
      2 print(calculation)

<ipython-input-12-4304ba3859f1> in calc_2(df)
      5     d1_calc = calc_1(df)
      6 
----> 7     if df['Product'] == 'P1':
      8         if df['Type'] == 'Food':
      9             calc2 = d1_calc*np.log(df['A'])

~/anaconda3/lib/python3.7/site-packages/pandas/core/generic.py in __nonzero__(self)
   1477     def __nonzero__(self):
   1478         raise ValueError(
-> 1479             f"The truth value of a {type(self).__name__} is ambiguous. "
   1480             "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
   1481         )

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Aucun commentaire:

Enregistrer un commentaire