#python #pandas #pivot-table
#python #pandas #сводная таблица
Вопрос:
Я пытаюсь создать сводную таблицу, которая объединяет несколько (более 8) фреймов данных в один.
В таблицах несколько столбцов, но здесь я буду упрощать:
Table1
week project
42 ABC
42 FGA
42 ZTR
44 HTZ
44 UZR
44 LOP
46 POL
46 ZTT
46 ART
46 ART
...
Через несколько недель может не быть никакого появления какого-либо проекта. Таблица 2, 3, 4 и так далее, Безусловно, будет иметь разное количество еженедельных вхождений.
Единственный общий столбец для всех таблиц — это столбец недели. В некоторых таблицах больше или меньше столбцов, также заголовки столбцов могут отличаться. Столбец недели является единственным общим столбцом для всех и, как я полагаю, здесь достаточно для использования исключительно.
Моя цель — подсчитать количество вхождений во всех таблицах за неделю. В конечном счете, я хотел бы достичь:
index table1 table2 table3 table4 table5
42 3 3 4 11 23
43 0 4 10 15 7
44 3 12 8 9 1
45 0 7 0 0 8
46 4 6 7 0 22
47 8 3 12 6 0
Такой подсчет был бы довольно простым в Excel, просто используя сводную таблицу с подсчетом.
Как бы я поступил в таком сценарии на Python?
Комментарии:
1. Используйте concat для создания одного фрейма данных, который включает все, и используйте pivot_table для получения результата
Ответ №1:
Вы можете использовать concat
с keys
аргументом и последующим groupby
unstack
.
Здесь следует отметить, что при выводе ключа вручную было бы лучше, если бы у каждой таблицы был идентификатор, показывающий, из какого источника он получен.
tables = [df1,df2] # if you want to make the keys dynamic,
#tables = table_dict = dict(zip([f'table {i}' for i in range(1,len(tables) 1)],tables))
df_new = (
pd.concat(tables, axis=0, keys=["table1", "table2"])
.set_index("week", append=True)
.groupby(level=[0, 2])
.count()
.unstack(0)
)
project
table1 table2
week
42 3 3
44 3 3
46 4 4
Комментарии:
1. Спасибо. однако происходит нечто довольно странное. Я получаю двухуровневый заголовок столбца. Первый уровень представляет собой все столбцы из таблицы 1 (неделя, проект, владелец, дата), второй уровень представляет собой повторение моей желаемой сводной таблицы (цифры верны, но повторяются для каждого столбца table1 снова и снова).
2. привет @Botan пожалуйста, предоставьте образец, который имитирует ваш ввод / вывод, и я с радостью помогу. Сложно написать решение, используя только догадки.