我在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