Python 如何从所有列计算成对矩阵

Python 如何从所有列计算成对矩阵,python,pandas,numpy,matrix,Python,Pandas,Numpy,Matrix,假设我有数据帧: 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 实际数据由100列和1000行组成 我有一个函数,函数的目的是计算有多少值高于另一列的最小值。函数如下所示: def get_count

假设我有数据帧:

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
实际数据由100列和1000行组成

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

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'])
函数的输出示例如下:

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
来自itertools导入产品的

成对=产品(df.columns,repeat=2)
最小值={}
输出=[]
对于成对的每个_对:
#确保我们只计算一次最小值
最小值=最小值.get(每个值对[1],df[每个值对[1]].min())
最小值[每对[1]]=min_
count=df[df[每对[0]]>min[每对[0]].count()
output.append(计数)
df_所需=pd.DataFrame(
[输出[i:i+len(df.列)],用于范围内的i(0,len(输出),len(df.列))],
columns=df.columns,index=df.columns)
打印(需要df_)
这是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)是可能的。

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