Panda 交叉表函数获取条件编号

Panda crosstab function getting number for conditions

我不确定标题是否选得好,很抱歉。如果这已经被覆盖,请让我知道我在哪里找不到它。 对于我正在进行的分析,我主要在 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)

我可以在 table 中得到条件的名称,但我不想要这个。我想要 2 个条件的数字。这怎么可能?也许有办法在单独的函数中执行此操作?

编辑: 使用 crosstab,您需要将 'CoEx' 列添加到索引,并使用 'sample' 作为感兴趣的列:

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_table interface。在你的情况下是:

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

*这里的'values'参数只是为了减少列的数量,使用不合适方法的产物