#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