【问题标题】:Calculating pairwise overlap for multiple boolean columns in pandas dataframe计算熊猫数据框中多个布尔列的成对重叠
【发布时间】:2022-01-15 00:29:11
【问题描述】:

我有一个带有多个布尔列的 pandas 数据框。我想找到所有这些列之间的成对重叠。重叠应该类似于两列之间的重叠比例,不包括两者都为零的情况。就像 Jaccard 分数一样,但我想排除两个元素都为零的情况。

数据框示例:

import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame(np.random.binomial(1, 0.5, size=(100, 5)), columns=list('ABCDE'))
print(df.head())

   A  B  C  D  E
0  1  1  1  1  0
1  1  0  1  1  0
2  1  1  1  1  0
3  0  0  1  1  1
4  1  1  0  1  0

理想情况下,我想要这样的解决方案(来自这个类似的问题How to compute jaccard similarity from a pandas dataframe):

from sklearn.metrics.pairwise import pairwise_distances
jac_sim = pairwise_distances(df.T, metric = "jaccard")
jac_sim = pd.DataFrame(jac_sim, index=df.columns, columns=df.columns)

仅排除两列中的两个元素都为 False 的情况。

【问题讨论】:

    标签: python pandas pairwise-distance


    【解决方案1】:

    一种选择是使用您的自定义距离函数调用scipy.spatial.distance.cdist

    from scipy.spatial.distance import cdist
    
    def f(a, b):
      both_one = ((a & b) == 1).sum()
      different = (a != b).sum()
      return 1 - different / (different + both_one)
    
    dists = pd.DataFrame(cdist(df.T, df.T, f), index=df.columns, columns=df.columns)
    #           A         B         C         D         E
    # A  1.000000  0.240000  0.380952  0.391892  0.260274
    # B  0.240000  1.000000  0.323944  0.428571  0.320000
    # C  0.380952  0.323944  1.000000  0.333333  0.328571
    # D  0.391892  0.428571  0.333333  1.000000  0.362500
    # E  0.260274  0.320000  0.328571  0.362500  1.000000
    

    【讨论】:

    • 谢谢!我把函数改写得更简单了:def f(a, b): return ((a&b)==1).sum()/ ((a|b)==1).sum()
    【解决方案2】:

    这样的事情有帮助吗?

    df['AB'] = df['A'] + df['B']
    vcs = df['AB'].value_counts()
    prop = vcs[2] / (vcs[1] + vcs[2]) # Two means overlap, 1 means no overlap
    
    print(prop)
    

    【讨论】:

      猜你喜欢
      • 2018-09-23
      • 2018-02-22
      • 2019-10-15
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 2021-12-28
      相关资源
      最近更新 更多