0
我有一系列代谢物在系统各个隔室中存在的数据。我也有关于每种代谢物是什么类型的信息。我想要一个频率表,显示每个隔室中每种类型代谢物的数量。该数据是这个样子:基于多个交叉表的熊猫频率表
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
给
comp_1 comp_2 met_id met_type
0 True False met_a amino_acid
1 False True met_b amino_acid
2 True True met_c lipid
3 True False met_d lipid
4 False True met_e peptide
5 True True met_f peptide
我想这样的一个汇总表(或数据帧):
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
,我想我可以连接每一个系列的,但有一个整洁的方式来创建计数所有的表隔间列?
嗯,这对m y玩具的例子,但在我的真实数据集'comp_1'和'comp_2'是布尔类型,所以我得到一个错误'DataError:没有数字类型来聚合'。我会编辑我的问题以清楚地说明 - 布尔类型有没有类似的方法? –
你可以显示真实的数据集 – Dark
对不起,实际上我认为问题是布尔列表中有NaN打破你的答案。为了总结的目的,我可以用False替换NaN,它的效果非常好!我会接受你的答案并转换NaN。 –