计算字典中每个键的每个值的频率,然后将计数信息放入数据框中

时间:2019-03-11 12:17:57

标签: python-3.x pandas dataframe dictionary count

目前,我有一个这样的字典:{'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

我发现的最相似的问题是Create a pandas dataframe of counts,但是每个键的值类型不同,因此在键之间并不常见。另外,由于每个键的值列表的长度都不同,因此ValueError是我一直遇到的问题。

1 个答案:

答案 0 :(得分:4)

在字典理解中使用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