Попытка закодировать Python-эквивалент функции SUMIF в Excel - PullRequest
1 голос
/ 01 ноября 2019

Я пытаюсь переписать файл .xlsx с нуля, используя Python. Лист Excel содержит 99 строк и 11 столбцов. Я уже сгенерировал 99 строк x 8 столбцов, и сейчас я работаю над созданием 99 строк x 9 столбцов. Этот 9-й столбец рассчитывается на основе формулы SUM-IFS в Excel. Учитываются столбцы 2, 4 и 7.

Кол. 2 имеет числовые значения int. В столбце 4 есть трехбуквенные значения кодов аэропортов, например, NYC для Нью-Йорка. В столбце 7 также есть трехбуквенные значения кодов аэропортов, например DEL для Дели.

Формула суммы-if для ячеек столбца 9 SUMIFS(B:B, D:D, D2, G:G, G2)

Следовательно, он суммирует числовые значения в столбце 2 для соответствующих городов в столбце. 4 и цв. 7. Если есть только одно вхождение пары городов в пол. 4 и цв. 7 тогда нечего суммировать и ячейка в столбце 9 = значение int в ячейке в столбце. 2 Однако, если есть несколько вхождений пары городов в пол. 4 и цв. 7, то соответствующие значения в цв. 2 суммируются, и это становится значением ячейки в цв. 9

Пример:

enter image description here

В этом примере столбец2 - Продажа, Кол.4 - Город происхождения, Кол. 7 - Город назначения и Кол. 9 - это Результат, который использует =SUMIFS(B:B,C:C,C2,D:D,D2)

Я пытаюсь вычислить столбец 9, используя python для большого набора данных, который у меня есть. На данный момент мне удалось создать список словарей, где я сделал ключ как origin_city-destination_city, а значение - как целочисленное значение col. 2. Список слов содержит 99 строк, например файл Excel, поэтому каждая строка файла Excel представлена ​​в виде слова. При печати словаря это выглядит примерно так:

{'YTO-YVR': 570}
{'YVR-YTO': 542}
{'YTO-YYC': 420}
{'YYT-YTO': 32}
{'YWG-YYC': 115}

Я размышлял, можно ли перебрать список диктов и создать его версию SUMIFS, что приведет к 99 диктам всписок, в котором каждый dict имеет значение sumif. После этого я должен записать все эти значения в столбец в файле Excel ..

Я надеюсь, что кто-то здесь может помочь! Заранее большое спасибо:)

1 Ответ

1 голос
/ 01 ноября 2019

Вы можете использовать панд 'groupby с transform:

import pandas as pd
df = pd.DataFrame({'Sales': [100,110,200,300,150,200,100],
                   'Origin': ['YYZ','YEA','CDG','YYZ','YEA','YVR','YEA'],
                   'Dest': ['DEL','NYC','YUL','DEL','YTO','HKG','NYC']})

df['Result'] = df.groupby(['Origin','Dest']).Sales.transform('sum')

Результат:

   Sales Origin Dest  Result
0    100    YYZ  DEL     400
1    110    YEA  NYC     210
2    200    CDG  YUL     200
3    300    YYZ  DEL     400
4    150    YEA  YTO     150
5    200    YVR  HKG     200
6    100    YEA  NYC     210
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...