#python #pandas #dataframe #tkinter
Вопрос:
Приношу извинения за плохую формулировку названия этого поста, я не уверен, как лучше всего упростить объяснение того, что я пытаюсь сделать.
У меня есть вывод фрейма данных, в котором отмечены учетные коды с несогласованным столбцом описания между строками. Например:
Accounting Codes Account Description
10 D_B 2
10 D_B two
11 D_C 3
11 D_C three
12 D_D 4
12 D_D four
13 D_D FOUR
Я пытаюсь использовать этот фрейм данных для сопоставления каждого уникального кода с меткой tkinter, в то время как каждое из описаний, соответствующих этому коду, отображается в выпадающем списке combobox. Так, например, у меня есть метка с пометкой «D_D» и поле комбинаций в следующем столбце с выпадающими вариантами «4», «четыре» и «ЧЕТЫРЕ», и то же самое для 2 других кодов учетных записей.
Основная проблема, с которой я сталкиваюсь, заключается в преобразовании приведенного выше фрейма данных в формат списка, подобный приведенному ниже, где первым элементом является код учетной записи, за которым следуют повторяющиеся описания, которые затем можно легко просмотреть для создания элементов tkinter:
duplicates = [
['D_B', '2', 'two'],
['D_C', '3', 'three'],
['D_D', '4', 'four', 'FOUR']
]
Я действительно в полной растерянности относительно того, как даже начать преобразование этого, я попытался взглянуть на aggregate и groupby, но не могу понять, как достичь вышеуказанного результата.
Ответ №1:
Воспользуйся groupby_apply
:
duplicates = df.groupby('Accounting Codes')['Account Description']
.apply(lambda x: [x.name, *x]).tolist()
print(duplicates)
# Output:
[['D_B', '2', 'two'], ['D_C', '3', 'three'], ['D_D', '4', 'four', 'FOUR']]