簡體   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