2015-11-13 3 views
1

У меня есть следующий dataframe:панды DataFrame к списку Словаря, используя столбцы как ключ

ID  Col1 Col2 
1  "A"  "Z" 
1  "A"  "Y" 
1  "B"  "Z" 
2  "A"  "X" 
2  "C"  "P" 

Я хочу, чтобы преобразовать выше в списке формы Dict, как показано ниже с подсчетами по идентификатору столбцы:

[{"A" : 2, "B" : 1, "Z" : 2, "Y" : 1}, {"A" : 1, "C" : 1, "X" : 1, "P" : 1}] 

В любом случае я могу это достичь. У меня очень большой размер данных.

ответ

1

Предположим, что ваш dataframe имеет имя df. Вы можете получить номера строк для каждого идентификатора с помощью df.groupby('ID').groups:

group_rows = df.groupby('ID').groups 

Мы будем перебирать каждую группу ID, а затем использовать Counter для подсчета значений в Col1 и Col2. Затем я добавлю их в словарь.

from collections import Counter 

my_dict = {} 
for group_id, rows in group_rows.iteritems(): 
    c = Counter(df.iloc[rows, 1]) # 1 = index number for `Col1` 
    c.update(df.iloc[rows, 2]) # 2 = index number for `Col2` 
    my_dict[group_id] = dict(c) 

>>> my_dict 
{1: {'A': 2, 'B': 1, 'Y': 1, 'Z': 2}, 
2: {'A': 1, 'C': 1, 'P': 1, 'X': 1}} 

Я выбрал для вывода результатов в словарь вместо необходимого список таким образом, что связь между группой ID и подсчитанных значениями явно. Если это проблема, я могу преобразовать их в список, предположив, что dataframe сначала сортируется столбцом ID.

keys = my_dict.keys() 
keys.sort() 
my_list = [my_dict[k] for k in keys] 
>>> my_list 
[{'A': 2, 'B': 1, 'Y': 1, 'Z': 2}, {'A': 1, 'C': 1, 'P': 1, 'X': 1}] 
Смежные вопросы