Skip to main content
 首页 » 编程设计

python之在 Pandas 中找到重叠的列比

2025年05月04日22rubylouvre

Dataframe(假设所有值都是分类值):

df = pd.DataFrame( 
{"a" : [1 ,2, 3, 4, 5], 
"b" : [2,1,3,4,5], 
"c" : [1,3,4,2,5]}, 
index = [1, 2, 3, 4, 5]) 

我想找出不同列之间存在的重叠百分比

check_a_b = df.a == df.b 
check_b_c = df.b == df.c 
check_a_c = df.a == df.c 
 
print(np.sum(check_a_b)/len(check_a_b)) # 0.6 
print(np.sum(check_b_c)/len(check_b_c)) # 0.2 
print(np.sum(check_a_c)/len(check_a_c)) # 0.4 

需要作为矩阵/DataFrame(三角矩阵)的最终输出:

    a    b    c 
a       0.6   0.4  
b             0.2 
c 

现在我想以自动方式为超过 100K 行的数据实现 15 列。 执行此操作的优化方法是什么?

请您参考如下方法:

下降到 numpy 通常是有效的。只有在得到结果时才返回到 pandas。

from itertools import combinations 
 
df = pd.DataFrame({"a" : [1 ,2, 3, 4, 5], 
                   "b" : [2,1,3,4,5], 
                   "c" : [1,3,4,2,5]}, 
                  index = [1, 2, 3, 4, 5]) 
 
a = df.values 
 
d = {(i, j): np.mean(a[:, i] == a[:, j]) for i, j in combinations(range(a.shape[1]), 2)} 
 
res, c, vals = np.zeros((a.shape[1], a.shape[1])), \ 
               list(map(list, zip(*d.keys()))), list(d.values()) 
 
res[c[0], c[1]] = vals 
 
res_df = pd.DataFrame(res, columns=df.columns, index=df.columns) 
 
#      a    b    c 
# a  0.0  0.6  0.4 
# b  0.0  0.0  0.2 
# c  0.0  0.0  0.0