迭代熊猫数据框中的所有列

时间:2021-07-12 17:25:07

标签: python pandas dataframe

我有一个包含 100 列的 Pandas 数据框。我想执行一个操作,将所有可能的列组合相互比较(col 1 与 col2、col 1 与 col3、[...] col 99 与 col 100)。

例如:

colA   colB   colC   colD
   1      1      2      1

例如,比较两个值之间的相等值应该为 yes 产生 colA vs. colB,对于 colA 与 colC 应产生 no

理想情况下,我只想进行唯一比较,因此 colA vs. colB 等于 colB vs. colA,并且只应保留一个值。

有什么有效的方法吗?

2 个答案:

答案 0 :(得分:1)

我要做的第一件事是设置比较命令 例如

(df['col1'] == df['col2']).any()

我们需要的是所有列的组合

from itertools import combinations
combs = list(combinations(df.columns, 2))

现在我们可以遍历它们并比较它们,使用我们从顶部开始的单行

for cmb in combs:
    print((df[cmb[0]] == df[cmb[1]]).any())

答案 1 :(得分:1)

import itertools
from scipy.spatial.distance import pdist
pd.Series(pdist(df.T)==0, index=itertools.combinations(df.columns, 2))

输出:

(colA, colB)     True
(colA, colC)    False
(colA, colD)     True
(colB, colC)    False
(colB, colD)     True
(colC, colD)    False

替代矩阵:

import itertools
from scipy.spatial.distance import pdist, squareform
pd.DataFrame(squareform(pdist(df.T)) == 0, index=df.columns, columns=df.columns)

输出:

       colA   colB   colC   colD
colA   True   True  False   True
colB   True   True  False   True
colC  False  False   True  False
colD   True   True  False   True
相关问题