You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中统计大型基因型DataFrame内[-1,-1]或[0,-1]的出现次数

统计DataFrame中[-1,-1]或[0,-1]的出现总数

针对你的大型DataFrame(235832行×79列),以下是两种高效实现统计的方法,优先推荐向量化方案以提升处理速度:

方法1:Pandas逐元素判断(简单直观)

先定义判断函数检查每个单元格值是否匹配目标列表,再通过两次求和得到全局总数:

import pandas as pd

# 假设你的DataFrame名为df
def match_target(x):
    return x == [-1, -1] or x == [0, -1]

# 逐元素转换为布尔值后累加统计
total_count = df.applymap(match_target).sum().sum()
print(total_count)
  • applymap(match_target):将每个单元格转为True(符合目标)或False(不符合)
  • 第一次sum()对每列求和,第二次sum()将列结果累加,得到所有符合条件的元素总数

方法2:Numpy向量化操作(大数据量优先)

对于超大型数据集,Numpy的向量化运算比applymap效率更高,需先将列表转为可哈希的元组(列表无法直接参与Numpy集合判断):

import pandas as pd
import numpy as np

arr = df.to_numpy()
# 批量将数组中的列表转为元组
arr_tuples = np.vectorize(tuple)(arr)
# 定义目标元组集合
targets = [(-1, -1), (0, -1)]
# 快速统计符合条件的元素数量
total_count = np.sum(np.isin(arr_tuples, targets))
print(total_count)
  • np.vectorize(tuple):解决列表不可哈希的问题,批量转换为可参与判断的元组
  • np.isin:快速匹配目标集合,np.sum直接统计所有匹配成功的元素数

处理缺失值(可选)

如果DataFrame存在None或缺失值,可先过滤再统计:

# Pandas方法:删除含缺失值的行/列(根据需求调整dropna参数)
total_count = df.dropna().applymap(match_target).sum().sum()

# Numpy方法:先过滤缺失值再统计
mask = pd.notna(arr)
total_count = np.sum(np.isin(arr_tuples[mask], targets))

内容的提问来源于stack exchange,提问作者ARWA ABDULKADER BASHANFAR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 12:01:52