对多个熊猫列进行排序并计算大于零的值百分比
Posted
技术标签:
【中文标题】对多个熊猫列进行排序并计算大于零的值百分比【英文标题】:sorting multiple pandas columns and calculating value percent greater than zero 【发布时间】:2022-01-12 21:08:57 【问题描述】:我有一个 pandas 数据框,我将其融合在一起,每一行都是不同的单细胞基因表达。我想按元数据列(“患者 ID”、“集群 ID”、“基因 ID”)进行排序,并计算“值”列中有多少单元格的值大于零。
接下来,我想将其除以该“患者 ID”中该“集群 ID”中的单元格的总值。我不是 100% 确定如何做到这一点。我尝试了类似的东西
df = df.groupby(['patient ID', 'Cluster ID', 'Gene ID']).size().reset_index(name='counts')
获得df
,其中包含患者表达基因的簇内细胞总数。我仍然需要一种方法来按“值”列高于零的值对它们进行排序,然后除以得到我的最终值。
当我尝试类似的事情时
df["Counts > 0"]= df.groupby(['patient ID', 'Cluster ID', 'Gene ID'])['value'].gt(0).sum()
我收到一条错误消息:
AttributeError: 'SeriesGroupBy' object has no attribute 'gt'
编辑:示例
data = 'Patient ID':['C100', 'C100', 'C100', 'C101', 'C102', 'C103'],
'Cluster ID':['ID 1', 'ID 2', 'ID 2', 'ID 2', 'ID 3', 'ID4'],
'Gene ID':['Gene 1', 'Gene 1', 'Gene 2', 'Gene 2', 'Gene 3', 'Gene 4'],
'Expression Value':[0, 0, 5, 0, 20, 5],
# Create DataFrame
df = pd.DataFrame(data)
# Print the output.
df
EXAMPLE but it gets much bigger and complicated
对于患者 ID、集群 ID、基因 ID 的每个组合,我如何计算它们的总和?它们的总和大于“值”中的零?将它们两者相除,找出患者体内某个簇中某个基因 ID 呈阳性的细胞的百分比。
【问题讨论】:
你能举一个df输入的例子吗? @DaSong 我刚刚用一个例子编辑和更新了帖子! 【参考方案1】:好的,我找到了获得我想要的东西的方法:
总数:
CRC_Merge_GD_total_TEST = CRC_GD_Melt_1.groupby(['HTO_secondID', 'new_clusters_3', 'variable'])['value'].agg(pos=lambda ts: (ts.ge(0)).sum())
CRC_Merge_GD_total_TEST = CRC_Merge_GD_total_TEST.rename(columns="pos": "Sum of total")
总计数大于零:
CRC_Merge_GD_over_zero = CRC_GD_Melt_1.groupby(['HTO_secondID', 'new_clusters_3', 'variable'])['value'].agg(pos=lambda ts: (ts > 0).sum())
CRC_Merge_GD_over_zero = CRC_Merge_GD_over_zero.rename(columns="pos": "Sum gt zero")
结合:
df_new = CRC_Merge_GD_total_TEST.merge(CRC_Merge_GD_over_zero, left_index=True, right_index=True)
计算阳性百分比:
df_new['pct pos'] = df_new['Sum gt zero']/df_new['Sum of total'] * 100
【讨论】:
以上是关于对多个熊猫列进行排序并计算大于零的值百分比的主要内容,如果未能解决你的问题,请参考以下文章