Я реорганизую и очищаю свой код и перенес набор функций для работы в классе.Базовая настройка в порядке, так как одна из функций работает нормально, а другие - нет.Код выполняется, как и ожидалось, пока не в классе, поэтому я подозреваю, что моя обработка .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
для каждого человека в конкретном событии.
Отредактировано для улучшения примера и предоставления контекста