字典到数据帧存在/absen

2024-05-23 19:02:28 发布

您现在位置:Python中文网/ 问答频道 /正文

从二维字典中,如何将其转换为数据帧或存在/不存在矩阵,其中值在列表中)是列,键是行名称? 在一个列表中累积值,我的目标是将它们组织成一个矩阵。在

我一直在尝试,但没有成功:

values = set()

for genome, info in dict_cluster.items():
    for v in info:
        #t = [genome, ([v for v in info])]
        t = [genome,v]
    print pd.DataFrame(t)

输入:

^{pr2}$

输出:

^{3}$

我的输出是:

                 0
0  GCF_900068895.1
1  transatpks-nrps
                 0
0  GCA_002415165.1
1      thiopeptide
                 0
0  GCA_000367685.2
1       t1pks-nrps
                 0
0  GCA_002732135.1
1       t1pks-nrps

Tags: 数据ininfo名称目标列表forgenome
3条回答

你应该用Python来做这个:

my_dict = {
            'A': ['arylpolyene', 'hserlactone', 'hserlactone', 'nrps', 'siderophore', 't1pks-nrps', 'terpene', 'thiopeptide', 'transatpks-nrps'],
            'B': ['hserlactone', 'hserlactone-arylpolyene', 'nrps', 'siderophore', 'thiopeptide'],
            'C': ['nrps', 'nrps', 'nrps', 'siderophore', 't1pks-nrps', 't1pks-nrps'],
            'D': ['nrps', 'siderophore', 't1pks-nrps']
            }

rows_list=list(my_dict.keys())
values=list(my_dict.values())
rows_size=len(rows_list)

columns_list = []

for sublist in values:
    for item in sublist:
        if item not in columns_list:
            columns_list.append(item)

columns_size = len(columns_list)

#initialize adjacent matrix
print('Initial adjacent matrix')
adjacent = [ [0]*columns_size for i in range(rows_size) ]
for row in adjacent:
    print(row)

for key, value in my_dict.items():
    for v in value:
        adjacent[rows_list.index(key)][columns_list.index(v)] += 1

print('-'*50)
print('Final adjacent matrix')
for row in adjacent:
    print(row)

在第一个循环for sublist in values:我创建了一个列表,其中包含您想要的值作为没有重复项的列。在

adjacent = [ [0]*columns_size for i in range(rows_size) ]中,我创建了一个列表,其中的元素数与字典键的数目相同。这些元素中的每一个都是一个列表,其中的元素数与列值的数目相同。在

我试着尽可能简单地做,如果有什么你搞不懂的,告诉我:)

也许你在找这样的东西:

val = {'A': ['arylpolyene', 'hserlactone', 'hserlactone', 'nrps', 'siderophore', 't1pks-nrps', 'terpene', 'thiopeptide', 'transatpks-nrps'],
       'B': ['hserlactone', 'hserlactone-arylpolyene', 'nrps', 'siderophore', 'thiopeptide'],
       'C': ['nrps', 'nrps', 'nrps', 'siderophore', 't1pks-nrps', 't1pks-nrps'],
       'D': ['nrps', 'siderophore', 't1pks-nrps']}
all_val = []
for k in val:
    for v in val[k]:
        all_val.append((k,v))

df = pd.DataFrame(all_val,columns=['key','val']).set_index('key')
df_count = df.pivot_table(index='key',columns='val',aggfunc=len)

输出:

^{pr2}$

^{}dictionary comprehension一起使用并分配给DataFrame

from collections import Counter

df = pd.DataFrame({k:Counter(v) for k, v in d.items()}).T.fillna(0).astype(int)
print (df)

   arylpolyene  hserlactone  hserlactone-arylpolyene  nrps  siderophore  \
A            1            2                        0     1            1   
B            0            1                        1     1            1   
C            0            0                        0     3            1   
D            0            0                        0     1            1   

   t1pks-nrps  terpene  thiopeptide  transatpks-nrps  
A           1        1            1                1  
B           0        0            1                0  
C           2        0            0                0  
D           1        0            0                0  

编辑:

对于指示符值,使用^{}

^{pr2}$
from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer()
df = pd.DataFrame(mlb.fit_transform(d.values()),columns=mlb.classes_, index=d.keys())
print (df)
   arylpolyene  hserlactone  hserlactone-arylpolyene  nrps  siderophore  \
A            1            1                        0     1            1   
B            0            1                        1     1            1   
C            0            0                        0     1            1   
D            0            0                        0     1            1   

   t1pks-nrps  terpene  thiopeptide  transatpks-nrps  
A           1        1            1                1  
B           0        0            1                0  
C           1        0            0                0  
D           1        0            0                0  

相关问题 更多 >