Как разделить список на основе другого списка значений?

#python

Вопрос:

У меня есть такой список:

 some = [["a", "1", "c"], ["a", "2", "@"], ["b", "1", "9"], ["c", "1", "pw"], ["c", "2", "af"]]
 

Список упорядочен по второму столбцу. Таким образом, все строки отсортированы здесь. Я пытаюсь разделить список на n разных списков на основе уникальных значений. Я попробовал следующее

 import pandas as pd
uniquevals = pd.DataFrame(some)[0].value_counts()
newlist = []
for i in uniquevals:
    newlist = some[1:i]
    print(newlist)
    print("Donen")
 

и в результате получается

 [['a', '2', '@']]
Done

[['a', '2', '@']]
Done

[]
Done
 

Но в идеале я хочу, чтобы строки в столбце разделялись на основе количества уникальных значений первого столбца. Здесь a имеет два значения, b имеет одно значение и c имеет два значения. Идеальный результат должен быть:

 [["a", "1", "c"], ["a", "2", "@"]]
Done

[["b", "1", "9"]]
Done

[["c", "1", "pw"], ["c", "2", "af"]]
Done
 

Комментарии:

1. Вы действительно пытаетесь создать фрейм данных, или вы просто думали, что у Панд будут правильные инструменты для решения проблемы? Если вы хотите обрабатывать свои данные как обычный вложенный список, то, безусловно, можно чисто решить проблему только с помощью стандартной библиотеки.

Ответ №1:

Почему бы просто не использовать pd.DataFrame.groupby :

 some = [["a", "1", "c"], ["a", "2", "@"], ["b", "1", "9"], ["c", "1", "pw"], ["c", "2", "af"]]
uniquevals = pd.DataFrame(some)
for _, i in uniquevals.groupby(0):
    print(i.to_numpy().tolist())
    print("Donen")
 

Выход:

 [['a', '1', 'c'], ['a', '2', '@']]
Done

[['b', '1', '9']]
Done

[['c', '1', 'pw'], ['c', '2', 'af']]
Done