Клавиши Dict не меняются при итерации l oop - PullRequest
0 голосов
/ 15 января 2020

Итак, у меня есть программа, которая просматривает данные о продажах и должна суммировать объемы продаж по штатам и кварталам. У меня есть вложенный dict с четвертями внутри каждого ключа состояния, например statesByQ = dict.fromkeys([set of state codes], [dict of quarters])

Затем у меня есть для l oop, который циклически перебирает DataFrame, индексируется уникальными именами в каждой строке и захватывает состояние, квартал и сумма с каждого. Затем он должен добавить сумму к указанной c вложенной точке диктовки для каждого штата и квартала, как показано ниже

for opps in sdfs.index:
    amount = sdfs["Amount"][opps]
    state = sdfs['Billing State/Province'][opps]
    fisp =sdfs['Fiscal Period'][opps]
    statesByQ[state][fisp] += amount

Но когда я go до конца и смотрю на результаты, он просто продолжает суммировать все суммы независимо от места в диктанте, на которое он указывал в данный момент времени, и назначая их в качестве значения. Вот как это выглядит, если я распечатаю каждую переменную:

opps: ALI: BOB,MO_Maker45_04.17-18.2019
state: MO
fisp: Q2-2019
amount: 19837.85
value assigned to dict: 19837.85
opps: ALI: JOHN, VA_L4_05.06.2019
state: VA
fisp: Q2-2019
amount: 10059.36
value assigned to dict: 29897.21

Редактировать: Добавление данных образца

So each row is one sale, and I want to sum all the sales for each state by fiscal period.

Так что Повторяю, проблема в том, что он, кажется, не передает должным образом новые ключи для словаря, даже если значение их переменной изменилось, т.е. хотя переменные state и fisp обновлены с новыми ключами из Dataframe, кажется, что они не попадают в словарь должным образом. Если я go в отладке и наблюдаю за заполнением словаря, он возьмет первое amount значение и поместит его на свое место, затем он возьмет следующее значение суммы и добавит его к предыдущему, даже если они не являются то же самое, затем устанавливает для обоих местоположений dict одинаковое значение. Так что в моем примере выше, statesByQ['MO']['Q2-2019'] и statesByQ['VA']['Q2-2019'] установлены на 29897,21 вместо их соответствующих 19837,85 и 10059,36

...