Как суммировать показатели по нескольким категориям в CSV файле?
Задал вопрос. Данные и критерии их деления на категории не изменились.
Но появился доп. вопрос по суммированию показателей по 3-м категориям.
Есть пример таблица CSV, над которой нужно совершать преобразования. Дата и время стоят в одной колонке, как object:
Категория 1 |Категория 2|Дата_загрузки |П_1|П_2 |
______________|___________|____________________|___|________|
A1_AAA_aaa-11 |ZZZ_1_aaa_1| 07.20.2020 00:00:00|2 |3
_____________ |___________|____________________|___|________|
111111-111 |ZZZ_2_aaa_b| 07.20.2020 00:00:00|1 |1
______________|___________|____________________|___|________
222222-222 |AAA_s_12a_2| 07.20.2020 00:00:00|1 |4
______________|___________|____________________|___|_________
333333-333 |AAA_s_12a_2| 07.20.2020 00:00:00|2 |3
______________|___________|____________________|___|_________
B1_BBB_bbb-11 |CCC_s_12a_2| 07.24.2020 00:00:00|0 |0
______________|___________|____________________|___|_________
B1_BBB_bbb-11 |CCC_s_12a_2| 07.20.2020 00:00:00|20 |0
______________|___________|____________________|___|_________
B1_BBB_bbb-11 |CCC_s_12a_2| 07.20.2020 01:00:00|20 |1
После преобразования хочу как результат получить новую таблицу следующего вида. Суммируются значения каждого из показателей с группировкой по:
Дата_загрузки,Категория 1,Категория 2
(она потом загружается в БД MS Sql):
Категория по буквам |Категория по аббревиатуре|Дата |П_1 |П_2
____________________|_________________________|__________|________|________|
Буквенная |ZZZ |07.20.2020|2 |3
______________|_________________________|__________|________|________|
Численная |ZZZ |07.20.2020|1 |1
______________|_________________________|__________|________|________|
Численная |AAA |07.20.2020|3 |7
______________|_________________________|__________|________|_________
Буквенная |CCC |07.20.2020|40 |1
______________|_________________________|__________|________|_________
Буквенная |CCC |07.24.2020|0 |0
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Попробуйте так:
df = pd.read_csv(r"c:\temp\data.csv", parse_dates=["Дата_загрузки"])
replace_map = {"Категория 1": {True: "Буквенная", False: "Численная"}}
res = (df
.groupby([df["Категория 1"].str.contains(r"[^-\d]"),
df["Категория 2"].str[:3],
df["Дата_загрузки"].dt.floor("D")])
.sum()
.reset_index()
.replace(replace_map))
результат:
In [32]: res
Out[32]:
Категория 1 Категория 2 Дата_загрузки П_1 П_2
0 Численная AAA 2020-07-20 3 7
1 Численная ZZZ 2020-07-20 1 1
2 Буквенная CCC 2020-07-20 40 1
3 Буквенная CCC 2020-07-24 0 0
4 Буквенная ZZZ 2020-07-20 2 3