Подсчитайте частоту каждого значения для каждого ключа в словаре и поместите информацию о количестве в фрейм данных - PullRequest
2 голосов
/ 11 марта 2019

В настоящее время у меня есть словарь, подобный этому: {'axin': ['GAUAUG', 'AAAUGC', 'AAAUGC', 'GUCAUG', 'UUUGAU', 'UUUGAU'], 'hedgehog-protein': ['ACUGGC', 'GUCAUG', 'UUUGAU'], 'pangolin': ['GAACAC', 'GAAAGA', 'UUUGAU', 'AAUACU']}.

Я хочу создать фрейм данных с каждым ключом в качестве столбца и каждым значением в качестве имени строки (или наоборот, на самом деле не имеет значения), а также подсчитывать вхождения каждого значения для каждого ключа.Например, первые несколько строк вывода будут такими:

        axin hedgehog-protein pangolin 
GAUAUG  1    0                0        
AAAUGC  2    0                0        
GUCAUG  1    1                1
UUUGAU  2    1                1        
ACUGGC  0    1                0

Самый похожий вопрос, который я нашел, был Создайте pandas dataframe of count , однако у них были разные типы значений для каждого ключаи поэтому не были общими для всех ключей.Кроме того, поскольку длина моих списков значений различна для каждого ключа, проблема ValueError, с которой я постоянно сталкиваюсь.

1 Ответ

4 голосов
/ 11 марта 2019

Используйте Counter в словаре, затем замените пропущенные значения и преобразуйте в целые числа:

d = {'axin': ['GAUAUG', 'AAAUGC', 'AAAUGC', 'GUCAUG', 'UUUGAU', 'UUUGAU'], 
     'hedgehog-protein': ['ACUGGC', 'GUCAUG', 'UUUGAU'],  
     'pangolin': ['GAACAC', 'GAAAGA', 'UUUGAU', 'AAUACU']}

from collections import Counter

df = pd.DataFrame({k: Counter(v) for k, v in d.items()}).fillna(0).astype(int)
print (df)
        axin  hedgehog-protein  pangolin
AAAUGC     2                 0         0
AAUACU     0                 0         1
ACUGGC     0                 1         0
GAAAGA     0                 0         1
GAACAC     0                 0         1
GAUAUG     1                 0         0
GUCAUG     1                 1         0
UUUGAU     2                 1         1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...