У меня есть этот код python3 со списком списков, которые мне нужно структурировать определенным образом для Excel. Вот что у меня есть:
>>> pprint(avrop_categories[0:3])
[['Name1', ['MainCategory1', 'SubCategory1', ('Item1', 1.0)]],
['Name2',
['MainCategory2', 'Subcategory2', ('Item2', 1.0)],
['MainCategory2', 'Subcategory3', ('Item3', 1.0)],
['MainCategory2', 'Subcategory4', ('Item4', 1.0)],
['MainCategory3', 'Subcategory5', ('Item5', 1.0)],
['MainCategory4', 'Subcategory6', ('Item6', 1.0)],
['MainCategory5', 'Subcategory7', ('Item7', 1.0)],
['MainCategory5', 'Subcategory8', ('Item8', 1.0)],
['MainCategory5', 'Subcategory9', ('Item9', 1.0)]],
['Name3',
['MainCategory3', 'Subcategory10', ('Item10', 1.0)], #<-note MainCategory3 again.
['MainCategory6', 'Subcategory11', ('Item11', 1.0)]]]
Мне нужно к этому добраться. Т.е. Имена в строках, MainCategories в столбцы и Items учитываются в их MainCategories. Подкатегории можно отбросить.
Как мне это сделать? Я использовал Python3 в течение короткого времени, и я знаю, как сохранить приведенное выше как файл csv, готовый для Excel, но я не знаю, как структурировать его так, как я хочу. Если я использую списки, чтобы поместить все основные категории в один список, а затем подсчитывать количество элементов в другой список, как мне поддерживать связь между основными категориями и количеством элементов? Я должен сделать что-нибудь еще? Может, использовать диктатор? Любая помощь будет оценена по достоинству, поскольку я понятия не имею, что делать.






Вот одно решение через библиотеку collections.defaultdict и pandas, учитывая список lst:
import pandas as pd
from collections import defaultdict
d = defaultdict(lambda: defaultdict(int))
for i in lst:
for j in i[1:]:
d[i[0]][j[0]] += 1
df = pd.DataFrame(index=sorted(d.keys()),
columns=sorted(set.union(*map(set, d.values()))))
for k, v in d.items():
for w in v:
df.loc[k, w] = d[k][w]
df = df.fillna(0).rename_axis('Name').reset_index()
Затем вы можете легко отправить это в Excel:
df.to_excel('file.xlsx', index=False)
Результат:
Name MainCategory1 MainCategory2 MainCategory3 MainCategory4 \
0 Name1 1 0 0 0
1 Name2 0 3 1 1
2 Name3 0 0 1 0
MainCategory5 MainCategory6
0 0 0
1 3 0
2 0 1
Удивительный! Спасибо, jpp! :)
Одно из ваших предложений, использование
dict, является хорошей отправной точкой. Мое решение основано на этом.