Преобразование фрейма данных из 2 столбцов кодов и несогласованных описаний во вложенный список всех возможных описаний для каждого уникального кода

#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']]