[英]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. colB
和no
可樂與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.