Создание данных из уникальных пар значений путем фильтрации по нескольким столбцам

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

Вот мой код, который терпит неудачу (данный dataframe df):

dd = defaultdict(dict) #create blank default dictionary values_col1 = df.col1.unique() #get the unique values from column 1 of df for i in values_col1: dd[i] = df[(df['col1']==i)] #for each unique value create a sorted df and put in in a dictionary values_col2 = dd[i].col2.unique() #get the unique values from column2 of df for m in values_col2: dd[i][m] = dd[i][(dd[i]['col2']==m)] #for each unique column2 create a sub dictionary 

Когда я запускаю его, я получаю очень длинное сообщение об ошибке. Я не буду вставлять все это здесь, но вот некоторые из них:

C: \ Anaconda3 \ lib \ site-packages \ pandas \ indexes \ base.py в get_loc (self, key, method, tolerance) 1944 try: -> 1945 return self._engine.get_loc (key) 1946, за исключением KeyError:

ValueError: неправильное количество элементов, прошедших 6, размещение подразумевает 1

One Solution collect form web for “Создание данных из уникальных пар значений путем фильтрации по нескольким столбцам”

Используйте функции pandas groupby для извлечения уникальных индексов и соответствующих строк вашего фрейма.

 import pandas as pd from collections import defaultdict df = pd.DataFrame({'col1': ['A']*4 + ['B']*4, 'col2': [0,1]*4, 'col3': np.arange(8), 'col4': np.arange(10, 18)}) dd = defaultdict(dict) grouped = df.groupby(['col1', 'col2']) for (c1, c2), g in grouped: dd[c1][c2] = g 

Это сгенерированный df :

  col1 col2 col3 col4 0 A 0 0 10 1 A 1 1 11 2 A 0 2 12 3 A 1 3 13 4 B 0 4 14 5 B 1 5 15 6 B 0 6 16 7 B 1 7 17 

И это извлеченный dd (ну, dict(dd) действительно)

 {'B': {0: col1 col2 col3 col4 4 B 0 4 14 6 B 0 6 16, 1: col1 col2 col3 col4 5 B 1 5 15 7 B 1 7 17}, 'A': {0: col1 col2 col3 col4 0 A 0 0 10 2 A 0 2 12, 1: col1 col2 col3 col4 1 A 1 1 11 3 A 1 3 13}} 

(Я не знаю, каково ваше использование для этого, но вам может быть лучше не groupby объекте groupby со словарем).

  • Проверьте, существует ли значение в индексе dataframe pandas
  • Добавить процент от общей колонки в Pandas pivot_table
  • Создание бинномозговых гистограмм в Spark
  • JS dataTables из панд
  • Преобразование длинных целых чисел в строки в пандах (чтобы избежать научной нотации)
  • Как я могу отфильтровать объект Pandas GroupBy и вернуть объект GroupBy?
  • Группа Панда и сумма
  • Добавление списка в начало вывода Pandas DataFrame
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.