Почему моя функция python работает по-разному, когда помещается в класс - PullRequest
0 голосов
/ 10 апреля 2019

Я реорганизую и очищаю свой код и перенес набор функций для работы в классе.Базовая настройка в порядке, так как одна из функций работает нормально, а другие - нет.Код выполняется, как и ожидалось, пока не в классе, поэтому я подозреваю, что моя обработка .self ускользнула.

Я перечитывал код снова и снова.Переписал вещи по-другому, чтобы увидеть, не испортил ли я что-то большое.

В качестве примечания я использую pandas dataFrames, если они обрабатывают по-разному в class.

Пример кода ниже.

from pandas import DataFrame, read_csv

class clss(object):

    def __init__(self, x):
        self.x1 = x  # x is a pandas data frame
        self.stat = defaultdict(dict)


    def worker0(self, key, key0):
        # Change value at given coordinates 
        if key in self.stat and key0 in self.stat[key]:
            self.stat[key][key0] += 1
        else: 
            self.stat[key] = dict(key0=0)

    def worker1(self, key, key0)
        if key in self.stat and key0 in self.stat[key]:
            self.stat[key][key0] += 2
        else: 
            self.stat[key] = dict(key0=0)

    def master(self):

        for a in self.x1.index:
            if self.x1.loc[a, 'val'] == 1:
                self.worker0(a, foo)
            else:
                self.worker1(a, foo)
                self.worker0(a, blah)

        self.x1 = DataFrame(stat).T
        print(self.x1)


x = read_csv('file.csv')  #index = [0, 1, 2] 
c = clss(x)
c.master()

Теперь, в зависимости от содержимого x, я должен получить следующий вывод:

    foo     blah
0   4       1
1   10      4
2   1       30

Вместо этого я получаю:

    foo     blah
0   15      35
1   15      35
2   15      35

Как я понял, неправильный путь - это сумма всех правильно разделенных значений.Однако я не совсем уверен, так ли это, но это выглядит несколько правдоподобно.

Чтобы дать больше контекста, у меня есть csv со списком событий (rows), и каждое событие имееткакое-то количество людей в каждом column.Если событие является конкретным событием, измените коррелированное значение в dict для каждого человека в конкретном событии.

Отредактировано для улучшения примера и предоставления контекста

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...