【问题标题】:Change Variable through Class Operating on DataFrame?通过在 DataFrame 上操作的类更改变量?
【发布时间】:2017-06-07 14:37:40
【问题描述】:

我有一个变量 initial_value,等于 1000,我想对 B 列上的值求和。initial_value 和 B 列只会在 C 列等于 1 而不是 0 时求和。因此,生成的初始值Class 运算后应该是 1030(或 1000 + 10 - 30 + 70 + 10)。到目前为止,我已经尝试过:

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

【问题讨论】:

    标签: python class pandas oop dataframe


    【解决方案1】:

    您可以将列 B 和列 C 相乘,然后将结果相加:

    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
    

    【讨论】:

      【解决方案2】:

      这将起作用:

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

      只需将 C 和 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())
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-25
        • 1970-01-01
        • 1970-01-01
        • 2018-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多