【问题标题】:Count the freq of each value for each key in a dictionary, and put the count info into dataframe计算字典中每个键的每个值的频率,并将计数信息放入数据框中
【发布时间】:2019-08-01 18:12:24
【问题描述】:

目前我有一本这样的字典:{'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 是我一直遇到的问题。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 谢谢,非常简单的解决方案!
    • @jezrael 如何将键转换为行,将值转换为列?
    • @dondapati - 使用df = pd.DataFrame.from_dict({k: Counter(v) for k, v in d.items()}, orient='index').fillna(0).astype(int)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    相关资源
    最近更新 更多