1

我不确定标题是否选对了,抱歉。如果这已经涵盖,请让我知道我在哪里找不到它。对于我正在做的分析,我在 JupyterLab 工作,主要是 scanpy。我想查看在莱顿聚类中共表达某些基因的细胞数量。到目前为止,我正在尝试使用 pandas 交叉表功能,并获得了每个集群的编号。但是,我有两个条件,我正在努力分离样本以分别获得细胞计数。

我用来获取总细胞数的代码可以正常工作。

pd.crosstab(adata_proc.obs['leiden_r05'], adata_proc.obs['CoEx'])

我正在努力获取样本数字的代码。我知道这aggfunc = ','.join不是正确的方法,但这是为了解释问题所在。

pd.crosstab(adata_proc.obs['leiden_r05'], adata_proc.obs['CoEx'], adata_proc.obs['sample'], aggfunc = ','.join)

我可以在表格中列出条件的名称,但我不想要这个。我想要两个条件的数字。这怎么可能?也许有办法在一个单独的函数中做到这一点?

在此处输入图像描述

4

1 回答 1

0

编辑:使用crosstab,您需要将“CoEx”列添加到索引中,并使用“样本”作为感兴趣的列:

pd.crosstab(index=[adata_proc.obs['leiden_r05'],adata_proc.obs['CoEx']], columns=[adata_proc.obs['sample']])

我建议使用该.groupby功能:

adata_proc.obs.groupby(['leiden_r05','CoEx'])["sample"].value_counts()

另一个选项(有点滥用)是pivot_tableinterface。在您的情况下,它是:

pd.pivot_table(adata_proc.obs, index=["leiden_r05"], columns=["CoEx","sample"],values='barcode',  aggfunc=len, fill_value=0)

*此处的“值”参数仅用于减少列的数量,这是使用不合适方法的产物

于 2021-12-19T15:53:53.563 回答