基于多交叉表的Pandas频率表

2024-05-16 22:55:45 发布

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

我有一组代谢物在一个系统的各个部分中存在的数据。我也有关于每种代谢物是什么类型的信息。我想要一个频率表,显示每种类型的代谢物在每个隔间的数量。数据如下:

df = pd.DataFrame({'met_id':['met_a','met_b','met_c','met_d','met_e','met_f'],
                   'met_type':['amino_acid','amino_acid','lipid','lipid','peptide','peptide'],
                   'comp_1':[True,False,True,True,False,True],
                   'comp_2':[False,True,True,False,True,True]})
print df

给予

^{pr2}$

我想要这样的摘要表(或数据帧):

met_type      comp_1 comp_2
amino_acid    1      1
lipid         2      1
peptide       1      2

显示每种代谢物在每个隔间中的数量。我可以使用交叉表获得计数,因此:

pd.crosstab(df_test.met_type,df_test.comp_1)[True]

给予

met_type
amino_acid    1
lipid         2
peptide       1
Name: True, dtype: int64

我想我可以将这些系列中的每一个串联起来,但是有没有一种简洁的方法来创建一个包含所有分隔列计数的表?在


Tags: 数据falsetrue类型df数量typemet
1条回答
网友
1楼 · 发布于 2024-05-16 22:55:45

你可以用groupby表示

df = pd.DataFrame({'met_id':
['met_a','met_b','met_c','met_d','met_e','met_f'],
               'met_type':
['amino_acid','amino_acid','lipid','lipid','peptide','peptide'],
                   'comp_1':[True,False,True,True,False,True],
                  'comp_2':[False,True,True,False,True,True]})
dfn = df.groupby("met_type").mean()
dfn = dfn[['comp_1','comp_2']]*2

这会给你汇总表

^{pr2}$

正如你建议我们可以使用sum(当时还是初学者:)

^{3}$
            comp_1  comp_2
met_type                  
amino_acid       1       1
lipid            2       1
peptide          1       2

相关问题 更多 >