Christopher Goings
Christopher Goings

Reputation: 159

Change Variable through Class Operating on DataFrame?

I have a variable initial_value, equal to 1000, that I would like to sum to values on Column B. initial_value and Column B will only be summed when Column C is equal to 1 and not 0. Therefore, the resulting initial value after the Class operation should be 1030 (or 1000 + 10 - 30 + 70 + 10). So far I have tried:

import pandas as pd
from __future__ import division
import numpy as np

    df = pd.DataFrame({"A":[40,50,60,70,20,30,40,10,10,80,60,40,50],\
 "B":[0,10,10,10,-50,10,10,-30,0,70,-20,-20,10], \
 "C":[0,0,0,1,0,0,0,1,0,1,0,0,1]})

A = df['A']
B = df['B']
C = df['C']

initial_value = 1000.00

class test:
    def __init__(self, A, B, C, initial_value):
        self.A = A
        self.B = B
        self.C = C
        self.initial_value = initial_value

    def test_values(self):
        self.initial_value = self.initial_value + self.B

        return self.initial_value

x = test(A, B, C, initial_value)
x.test_values()

print x

Upvotes: 0

Views: 68

Answers (2)

Franz
Franz

Reputation: 643

This will work:

def test_values(self):
    self.inital_value += sum(self.B*self.C)
    return self.initial_value

Just sum over the product of C and B:

import pandas as pd
from __future__ import division
import numpy as np

df = pd.DataFrame({"A":[40,50,60,70,20,30,40,10,10,80,60,40,50],\
"B":[0,10,10,10,-50,10,10,-30,0,70,-20,-20,10], \
"C":[0,0,0,1,0,0,0,1,0,1,0,0,1]})

A = df['A']
B = df['B']
C = df['C']

initial_value = 1000.00

class test:
    def __init__(self, A, B, C, initial_value):
        self.A = A
        self.B = B
        self.C = C
        self.initial_value = initial_value

    def test_values(self):
        self.inital_value += sum(self.B*self.C)
        return self.initial_value

x = test(A, B, C, initial_value)
print(x.test_values())

Upvotes: 1

akuiper
akuiper

Reputation: 214927

You can multiply column B and column C and then sum the result up:

def test_values(self):
    self.initial_value = self.initial_value + self.B.mul(self.C).sum()
                                            # ^^^^^^^^^^^^^^^^^^^^^^^^
    return self.initial_value
​​
x = test(A, B, C, initial_value)
x.test_values()
# 1060.0

Upvotes: 1

Related Questions