繁体   English   中英

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

[英]Iterate over all columns in 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. colBno可乐与COLC。

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

有什么有效的方法可以做到吗?

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

(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())
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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM