【问题标题】:How to compute pairwise matrix from all pandas columns如何从所有熊猫列中计算成对矩阵
【发布时间】:2021-05-23 19:50:31
【问题描述】:

考虑我有数据框:

data = [[11, 10, 13], [16, 15, 45], [35, 14,9]] 
df = pd.DataFrame(data, columns = ['A', 'B', 'C']) 
df 

数据如下:

    A   B   C
0   11  10  13
1   16  15  45
2   35  14  9

真实数据由一百列和一千行组成。

我有一个函数,该函数的目的是计算有多少值高于另一列的最小值。函数如下所示:

def get_count_higher_than_min(df, column_name_string, df_col_based):
    seriesObj = df.apply(lambda x: True if x[column_name_string] > df_col_based.min(skipna=True) else False, axis=1)
    numOfRows = len(seriesObj[seriesObj == True].index)
    return numOfRows

函数的示例输出如下:

get_count_higher_than_min(df, 'A', df['B'])

输出为3。那是因为df['B']的最小值是10,而df['A']的三个值都高于10,所以输出是3

问题是我想使用该函数计算所有列的成对

我不知道解决此问题的有效方法是什么。我希望以类似于混淆矩阵或类似于相关矩阵的形式输出。

示例输出:

    A   B   C
A   X  3  X
B   X  X  X
C   X  X  X

【问题讨论】:

  • 相等的情况下怎么办?数据总是整数吗?
  • 您能否发布完整的输出,因为验证答案是否正确很重要

标签: python pandas numpy matrix


【解决方案1】:

这是 O(n2m),其中 n 是列数,m 是行数。

minima = df.min()
m = pd.DataFrame({c: (df > minima[c]).sum()
                  for c in df.columns})

结果:

>>> m
   A  B  C
A  2  3  3
B  2  2  3
C  2  2  2

理论上 O(n log(n) m) 是可能的。

【讨论】:

    【解决方案2】:
    from itertools import product
    pairs = product(df.columns, repeat=2)
    
    min_value = {}
    output = []
    
    
    for each_pair in pairs:
        # making sure that we are calculating min only once
        min_ = min_value.get(each_pair[1], df[each_pair[1]].min())
        min_value[each_pair[1]] = min_
        
        count = df[df[each_pair[0]]>min_][each_pair[0]].count()
        output.append(count)
        
    df_desired = pd.DataFrame(
        [output[i: i+len(df.columns)] for i in range(0, len(output), len(df.columns))], 
        columns=df.columns, index=df.columns)
    
    print(df_desired)
    
       A  B  C
    A  2  3  3
    B  2  2  3
    C  2  2  2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-13
      • 2021-06-23
      • 2017-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      相关资源
      最近更新 更多