簡體   English   中英

比較兩個數據框的列?

[英]Comparing the columns of two data frames?

我有兩個數據框如下:

  df1:
            id,   f1,   f2,..., f800
            0,     5,  5.6,..,  3,7
            1,   2.4,  1.6,..,  1,7
            2,     3,  2.3,..,  4,4
            ....
            n,   4.7,  9,3,..., 8,2

 df2:
            id,   v1,   v2,..., v200
            0,     5,  5.6,..,  5,7
            1,   2.4,  1.6,..,  6,7
            2,     3,  2.3,..,  4,2
            ....
            n,   4.7,  9,3,..., 3,1

df1 包含 800 個特征,而 df2 僅包含 200 個特征。 第二個數據幀 (df2) 是第一個數據幀 (df1) 的一部分。 現在,我想找到包含 df2 列/變量的列(在 df1 中)的位置。 這里列的值應該相似,而不是列的名稱。 考慮到上面的例子,我想要的輸出應該是“f1 和 f2”或來自 df1 的列 [0, 1]。
任何想法來處理這個問題?

我會連接兩個數據幀,所以我確定只存在相同的索引

result = pd.concat([df1, df2], axis=1, join='inner')

那么你可以使用這個代碼:

import pandas as pd 
  
def getDuplicateColumns(df): 
    duplicateColumnNames = set() 
    
    for x in range(df.shape[1]-200): 
        col = df.iloc[:, x] 
          
        for y in range(df.shape[1]-200, df.shape[1]):  
            otherCol = df.iloc[:, y] 
            #if the columns are equal mark it down  
            if col.equals(otherCol): 
                duplicateColumnNames.add(df.columns.values[y]) 
                #here you can mark down both names, so you map them
    return list(duplicateColumnNames) 

cols = getDuplicateColumns(result)

然后您可以對返回的選定列執行任何您需要的操作,即刪除多余的列。 200 是第二個 df 中的預期列數,您可以將其作為參數發送。 如果您確定 df1 中的每個 col 在 df2 中只有 1 個匹配項,您也可以在找到匹配項后打破內部循環。

你需要把這個問題分解成第一部分是找到共同的特征

df1 = pd.DataFrame([[0,1,2,11],[3,4,5,12],[6,7,8,13]], columns=['A','B','C','D'])
df2 = pd.DataFrame([[1,2,11],[4,5,12],[7,8,14]], columns=['a','b','D']) 
common = set(df1.columns) & set(df2.columns)

另一個是檢查天氣這兩列是否相似

if(df1[common].equals(df2[common])): 
     print(df1[common])
else:
     print("Nothing common")

要檢查多列,您可以在 if 條件的頂部創建一個循環。

常用欄目:

common = set(df1.columns) & set(df2.columns)

要獲取 df2 中存在的 df1 列:

df1[common]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM