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
相关产品推荐
相关产品推荐

