我在df中大约有24列。我想将一列与其他所有列进行比较,以找到非零值并计算所有非零值。这是df外观的示例。

Col A   Col B    ColC
1         1       2
2         2       5
0         1       1
4         0       0
0         0       3
0         9       0
1         0       8
2         2       0


我想查看非零值,然后计数,并计算两列均非零的所有值。
所以我希望A上校先与B进行比较,然后再与C进行比较。
然后将B与A并然后与C并以此类推...

我可以手动写一封邮件进行比较。但是我想写一个自动执行的功能。

最佳答案

创建列名称的所有组合,然后用ne比较不等于,并通过True测试两个值是否都是DataFrame.all,并在列表理解中通过True最后计数sum的值:

from  itertools import  combinations

out = [(', '.join(x),  df.loc[:, x].ne(0).all(1).sum()) for x in combinations(df.columns, 2)]
print (out)
[('ColA, ColB', 3), ('ColA, ColC', 3), ('ColB, ColC', 3)]

df = pd.DataFrame(out, columns=['cols','count'])
print (df)
         cols  count
0  ColA, ColB      3
1  ColA, ColC      3
2  ColB, ColC      3

10-08 08:20
查看更多