比较两个数据框的列?

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 columns/variables 的列(在 df1 中)的位置。这里列的值应该相似,而不是列的名称。考虑到上面的例子,我想要的输出应该是“f1 and f2”或者来自 df1.
的列 [0, 1] 有解决问题的想法吗?

常用栏目:

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

获取存在于 df2 中的 df1 列:

df1[common]

我会连接这两个数据帧,所以我确定只存在相同的索引

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 中的每个列在 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 条件的顶部创建一个循环。